Я пытаюсь (на данный момент) создать сетку шириной 25 квадратов, на 12 квадратов вниз и заставить их переключаться между двумя цветами при нажатии (по умолчанию все квадраты синие, а нажатие на один сделает его красным. Еще один щелчок превратит он снова стал синим)
Я давно не занимался 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);}
}
}
}
}
}