我需要创建一个 8x8 网格,其中每个图块都是JButton
使用两个嵌套的 for 循环。我已经尝试过,但无法完成。需要进行黑白棋(奥赛罗)分配的游戏。
问问题
62 次
1 回答
1
Oracle 有一个很棒的教程,使用 JFC/Swing 创建 GUI,它将带您完成创建 Swing GUI 的步骤。跳过 Netbeans 部分。
这是一个带有 8 x 8 网格的 GUI JButtons
。
我做的第一件事是调用该SwingUtilities
invokeLater
方法。此方法确保在Event Dispatch Thread上创建和执行 Swing 组件。
我创建了一个JFrame
. JFrame
必须按特定顺序调用这些方法。这是我用于大多数 Swing 应用程序的顺序。
我创建了一个JPanel
. 使用JPanel
aGridLayout
来布置JButtons
我创建的 64。
Swing 组件应始终以JPanel
. AJFrame
有一个默认设置BorderLayout
,允许您JPanels
在JFrame
. 即使有可能,您也不应该将任何 Swing 组件放在JPanels
或JScrollPanes
直接放在JFrame
.
这是完整的可运行代码。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class OthelloGUI implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new OthelloGUI());
}
@Override
public void run() {
JFrame frame = new JFrame("Othello GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createMainPanel(), BorderLayout.CENTER);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JPanel createMainPanel() {
JPanel panel = new JPanel(new GridLayout(0, 8));
panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
for (int index = 0; index < 64; index++) {
JButton button = new JButton();
button.setPreferredSize(new Dimension(64, 64));
panel.add(button);
}
return panel;
}
}
于 2021-07-18T17:40:00.310 回答