我正在尝试(目前)创建一个宽 25 格、向下 12 格的网格,并在单击时使它们在 2 种颜色之间切换(默认情况下,所有格子都是蓝色的,单击一个格子会将其变为红色。再次单击将变为它再次变回蓝色)
我很久没有做过任何 Swing 的东西了,这将是我的 Android 应用程序的一个非常非常基本的关卡设计工具。它“有点”有效,但由于某种原因,鼠标位置似乎“偏离”了一点。
这是一个屏幕截图:
您可以看到的鼠标指针是我单击的位置,红色方块是改变颜色的那个(x 位置也关闭,但没有 'y' 那么多)。
为什么会这样?帮助将不胜感激。
代码(为调用我的 JPanel 'myFrames' 引起的混乱道歉 ;-))
public class GUI extends JFrame implements MouseListener{
JFrame myFrame = new JFrame();
JLabel myPanels[];
public GUI(){
super("Grid");
setSize(1000,400);
setResizable(false);
setLayout(new GridLayout(12,25));
addMouseListener(this);
myPanels = new JLabel[300];
for (int x = 0;x<myPanels.length;x++){
myPanels[x]=new JLabel("");
myPanels[x].setOpaque(true);
myPanels[x].setBackground(Color.BLUE);
myPanels[x].setBorder(BorderFactory.createLineBorder(Color.black));
}
//Add all the squares (JLabels)
for (int x = 0;x<myPanels.length;x++)
add(myPanels[x]);
}
@Override
public void mouseClicked(MouseEvent e) {
//iterate through all JPanels to determine clicked one
for (int x = 0;x<myPanels.length;x++){
if (e.getX()>myPanels[x].getX()&&e.getX()<(myPanels[x].getX()+myPanels[x].getWidth()))
{
if(e.getY()>myPanels[x].getY()&&e.getY()<(myPanels[x].getY()+myPanels[x].getHeight())){
//Toggle colours
if (myPanels[x].getBackground()==Color.blue)
myPanels[x].setBackground(Color.red);
else {myPanels[x].setBackground(Color.blue);}
}
}
}
}
}