我已经创建了一个JPanel[][]数组。
private JPanel[][] pnlFeld;装满了电池板
for (int i = 0; i < world.getSize(); i++) {
for (int j = 0; j < world.getSize(); j++) {
pnlFeld[i][j] = new JPanel();
pnlFeld[i][j].setBorder(new EtchedBorder());
pnlFeld[i][j].addMouseListener(ml);
pnlFeld[i][j].setBackground(off);
add(pnlFeld[i][j]);
}
}现在,我想通过单击它们来获得数组坐标([][]),但我不知道如何做到这一点。
我只是添加了一些方法来改变我点击的面板的颜色,与我的问题无关。
MouseListener ml = new MouseListener() {
@Override
public void mouseEntered(MouseEvent e) {
if (world.getMode().equals("Malen")) {
if (e.getSource() instanceof JPanel)
e.getComponent().setBackground(on);
// check();
}
else if (world.getMode().equals("Radieren")) {
if (e.getSource() instanceof JPanel)
e.getComponent().setBackground(off);
// check();
}
}
@Override
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
if (world.getMode().equals("Setzen")) {
if (e.getSource() instanceof JPanel) {
if (e.getComponent().getBackground() == off) {
e.getComponent().setBackground(on);
} else
e.getComponent().setBackground(off);
}
// check();
}
}
}
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
};发布于 2015-06-02 18:28:33
实际上,您可以使用getBounds()来获取组件的位置和大小。如果你指的是数组索引,那么可能有多个解决方案。
的行列
发布于 2015-06-02 19:11:14
通过单击
JPanel获取JPanel[][]坐标
使用带有ActionListener的JButton[][]可以更轻松地编码并获得更好的用户体验。ActionEvent有一个getSource()方法,它将标识被激活的按钮。
这个chess GUI对棋盘上的64个位置使用按钮。

发布于 2015-06-02 18:23:31
如果在循环中创建MouseListener,则可以在侦听器的代码中使用i en j。缺点是你会有更多的监听器实例。
https://stackoverflow.com/questions/30592904
复制相似问题