【发布时间】:2014-05-01 18:00:49
【问题描述】:
我正在用 Java 创建一个简单的扫雷游戏。尺寸 9x9。
我创建了一个JPanels 数组和一个按钮数组;我将每个按钮添加到其各自的JPanel。然后我将JPanels 添加到JFrame。
如何区分动作事件上的每个按钮?
这是我的一些代码:
int gridx = 9;
int gridy = 9;
JButton[] buttons = new JButton[gridx*gridy];
JPanel[] jpanels = new JPanel[gridx*gridy];
public Minesweeper(){
super("Minesweeper");
setLayout(new GridLayout(9,9));
JPanel panel = new JPanel();
int i = 0;
for(i = 0; i<gridx*gridy; i++){
jpanels[i] = new JPanel();
buttons[i] = new JButton();
buttons[i].addActionListener(buttonEvent);
jpanels[i].setLayout(new GridLayout(1,1));
jpanels[i].add(buttons[i]);
add(jpanels[i]);
}
//buttons[67].setEnabled(false);
setSize(300,300);
setVisible(true);
}
我能想到的唯一方法是向按钮添加文本,如下所示:
buttons[i] = new JButton(i);
然后调用getActionCommand(),但我不希望文本显示在按钮上。还有其他想法吗?
【问题讨论】:
-
我怀疑你可以使用
ActionEvent对象的getSource()方法,当你在ActionListener#actionPerformed方法存根上被回调时获得。 -
你不需要
jpanels,这里最好也省略panel,因为内容窗格有GridLayout。 -
仅供参考,您使用
JButton[]而不是JButton[][]有什么特别的原因吗?当然,您可以将您的JButton[81]映射到JButton[9][9],但您为什么要这样做? -
是的,我刚刚将其切换为二维数组
-
@Cruncher 没关系,我想通了 :)
标签: java jframe jbutton actionlistener