【问题标题】:Creating an Array of JButton创建一个 JButton 数组
【发布时间】:2016-04-07 03:57:26
【问题描述】:

基本上我正在尝试制作 Lightout 游戏!我想做一个 JButtons 数组 所以我可以跟踪每个按钮的索引(每个按钮的状态取决于其他按钮的状态)

目前为止:

JPanel panel = new JPanel();
    setTitle("Memory");
    setContentPane(panel);
    setPreferredSize(new Dimension(300, 300));
    panel.setLayout(new GridLayout(5,5));


    JButton[][] buttons = new JButton[5][5] ;
    for (int i = 0; i < 5; i++)
        for (int j = 0; j < 5; j++) {
          buttons[i][j] = new JButton();

    setDefaultCloseOperation(EXIT_ON_CLOSE);
    pack();
    setVisible(true);
        }

但这并不符合我的预期。当我运行它时,我得到了一个很大的空白 JFrame。任何帮助将不胜感激

【问题讨论】:

  • 你在哪里将所有这些 buttons 添加到代码中的框架中
  • 我的印象是buttons[i][j] = new JButton();是添加按钮的方法吗?我真的很抱歉,我在这方面有点菜鸟
  • @Elchapo 你的 for 循环不好。你调用 pack 和 setvisible 需要多少时间
  • @FastSnail 谢谢!我已经修好了
  • @Elchapo 这就是为什么不鼓励在 for 循环中省略大括号的原因。有一个更高的变化会犯错误。所以使用大括号来包裹 if 块

标签: java arrays swing jbutton


【解决方案1】:

附加的代码应该可以修复它。您正在创建按钮,但没有将其添加到 JFrame。我已经编辑了代码以添加操作侦听器,该侦听器访问 JButton 的 id 并在您单击它时显示它。

public class CodeSample extends JFrame {

private static final long serialVersionUID = -8134989438964195251L;

public CodeSample() {
    JPanel panel = new JPanel();
    setTitle("Memory");
    setContentPane(panel);
    setPreferredSize(new Dimension(300, 300));
    panel.setLayout(new GridLayout(5, 5));
    ButtonListener listener = new ButtonListener();

    JButton[][] buttons = new JButton[5][5];
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            buttons[i][j] = new JButton();
            buttons[i][j].setBackground(Color.black);
            buttons[i][j].putClientProperty("id",
                    String.valueOf(i).concat(String.valueOf(j)));
            buttons[i][j].addActionListener(listener);
            panel.add(buttons[i][j]);
        }
    }

    setDefaultCloseOperation(EXIT_ON_CLOSE);
    pack();
    setVisible(true);
}

public static class ButtonListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println(((JButton) e.getSource())
                .getClientProperty("id"));
    }

}

public static void main(String[] args) {
    new CodeSample();
}
} 

【讨论】:

  • 非常感谢!现在说得通了!为了清楚起见,这肯定是一个矩阵数组对吗?并且索引 [0][0] 处的按钮将成为左上角按钮?
  • @Elchapo 是的,正确的 [0][0] 将是左上角的按钮。可以通过多种方式实现。对于这种情况,矩阵数组是一个不错的选择。
  • 这个实现是一个矩阵,但是JButton(像任何对象一样)不一定需要存储在一个二维数组中。也可以有一个一维的按钮数组。
  • @ingrid 非常感谢!我可以使用按钮[i][j].setBackground(color.black); 设置按钮的背景。正确的? (如果有什么不同的话,我在 Mac 上..)
  • @Elchapo 现场。你可以通过调用buttons[i][j].setBackground(color.black);来添加背景
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多