【发布时间】:2012-03-22 09:09:58
【问题描述】:
我是 Java 新手。
我正在制作地雷。我正在使用带有参数(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) 为了尽快获得更好的帮助,请发帖 SSCCE。 2)最好每个..question问一个问题。 3) 布局管理器通常会尊重组件的首选大小而不是大小。 4) 请复制/粘贴错误消息和异常输出并在其上使用代码格式。 5)
ActionListener可能更适合此 GUI 中的按钮。它有什么作用? -
你不能让 x 和 y
final因为它们在循环中不断变化。你可以做什么(但这是一个丑陋的黑客,这就是为什么我不把它作为答案),在嵌套循环中放置一个声明:final int x2 = x; final int y2=y并参考x2和y2在你的听众里面。ActionListener更合适,设置preferredSize而不是大小,就像Andrew刚才说的那样。
标签: java swing listener coordinates jbutton