【问题标题】:Java Button Action CommandJava 按钮操作命令
【发布时间】: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


【解决方案1】:

您可以使用AbstractButton#setActionCommand

在你的循环中:

buttons[i].setActionCommand(i+"");

那么当你使用getActionCommand时你会得到i

请注意,我确实在对另一个答案的评论中提到,我将创建一个新类 Mine 其中 extends JButton 我相信这是一个更好、更完整的解决方案。然而,这可以相当快地完成工作。

【讨论】:

  • 啊!是的,这样做了。我不知道你可以在其中设置字符串以外的东西。谢谢!一旦我获得足够的声誉,我会将您的答案标记为已接受的答案。
  • @user3521471 您只能将String 设置为操作命令。 i+""i 转换为 String。当您使用getActionCommand 时,您必须将其转换回整数。
猜你喜欢
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
相关资源
最近更新 更多