我是Java新手。
我正在制作地雷。我使用GridLayout和paramteres(x_length,y_length)。我想知道我按下了哪个按钮 - >他的坐标(x,y)。但如果我输入它给听众它会给我错误 - >改变修饰符' x'决赛。 所以我的问题是如何才能简单地获得按钮的坐标?
我还想问一下如何才能简单地改变按钮的大小? 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]);
}
}
答案 0 :(得分:2)
首先应该为侦听器而不是匿名类创建自定义类,因为它需要参数(x和y)。
private static class ButtonMouseListener extends MouseAdapter {
private final int x;
private final int y;
public ButtonMouseListener(int x, int y) {
this.x = x;
this.y = y;
}
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1) {
JOptionPane.showMessageDialog(null, "Left -> " + x + " | " + y);
} else if (e.getButton() == MouseEvent.BUTTON3) {
JOptionPane.showMessageDialog(null, "Right -> " + x + " | " + y);
}
}
}
然后,您可以像这样使用您的代码:
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 ButtonMouseListener(x, y));
mines_array.add(buttons[x][y]);
}
}
这就是全部,玩得开心。 关于按钮的大小,如果在父容器中使用布局,它们的大小将由布局自动计算,并且不能使用setSize()更改。
答案 1 :(得分:2)
对于Mines更好用[{3}}
放在那里JToggleButtons