私は(今のところ)幅25マス、下に12マスのグリッドを作成し、クリックすると2色を切り替えるようにしようとしています(デフォルトではすべての四角は青で、1つをクリックすると赤になります。別のクリックで再び青に戻ります)
私は長い間 Swing のことをしていませんでした。これは、私の Android アプリの非常に基本的なレベルの設計ツールになるでしょう。それは「ちょっと」機能しますが、何らかの理由でマウスの位置が少し「ずれている」ようです。
これはスクリーンショットです:
あなたが見ることができるマウスポインターは、私がクリックした場所であり、赤い四角は色が変わったものです(x位置もずれていますが、「y」ほどではありません).
なぜこれが起こっているのですか?助けていただければ幸いです。
コード(JPanels を「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);}
}
}
}
}
}