基本上我正在尝试制作一个 Lightout 游戏!我想制作一个 JButton 数组 所以我可以跟踪每个按钮的索引(原因是每个按钮的状态取决于其他按钮的状态)
到目前为止我有:
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。任何帮助将不胜感激
最佳答案
附加的代码应该修复它。您正在创建按钮,但没有将其添加到 JFrame。我已经编辑了代码以添加访问 JButton 的 ID 并在您单击它时显示它的 Action 监听器。
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();
}
}
关于java - 创建一个 JButton 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36466438/