私はJavaで新しいです。Javaの複数のボタンの座標
私は鉱山を作っています。私はparamteres(x_length、y_length)でGridLayoutを使用しています。私はどのボタンを押したかを知りたいです - >彼の座標(x、y)。しかし、それをリスナーに入力するとエラーが出ます - > 'x'の修飾子をfinalに変更します。 私の質問は、単にボタンの座標を取得するだけですか?
また、ボタンのサイズを変更するにはどうすればいいですか? setSizeは私のためには機能しません。
for (int y = 0; y < y_length; y++)
{
for (int x = 0; x < x_length; x++)
{
buttons[x][y] = new JButton("X");
buttons[x][y].addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if (e.getButton() == MouseEvent.BUTTON1)
{
//exception -> Cannot refer to a non-final variable x inside an inner class defined in a different method
JOptionPane.showMessageDialog(null, "Left -> " + x + " | " + y);
}
else if (e.getButton() == MouseEvent.BUTTON3)
{
JOptionPane.showMessageDialog(null, "Right -> " + x + " | " + y);
}
}
});
mines_array.add(buttons[x][y]);
}
}
1をそこに置かれています。 2)質問ごとに1つの質問をするのが最善です。 3)レイアウトマネージャーは、一般的に、サイズ以上のコンポーネントの推奨サイズを尊重します。 4)エラーメッセージと例外出力をコピーして貼り付けて、コードフォーマットを使用してください。 5)このGUIのボタンには、「ActionListener」が適している可能性があります。それは何をするためのものか? –
xとyは、ループ内で常に変化するので、「最終」にすることはできません。あなたができること(しかし、醜いハックなので、答えとして入れないのです)は、ネストされたループの中に宣言を入れます: 'final int x2 = x; final int y2 = y'を参照して、リスナーの内部で 'x2'と' y2'を参照してください。 Andrewがちょうど言ったように、 'ActionListener'はより適切で、sizeの代わりにpreferredSizeを設定します。 –