0

我需要创建一个 8x8 网格,其中每个图块都是JButton使用两个嵌套的 for 循环。我已经尝试过,但无法完成。需要进行黑白棋(奥赛罗)分配的游戏。

4

1 回答 1

1

Oracle 有一个很棒的教程,使用 JFC/Swing 创建 GUI,它将带您完成创建 Swing GUI 的步骤。跳过 Netbeans 部分。

这是一个带有 8 x 8 网格的 GUI JButtons

黑白棋图形用户界面

我做的第一件事是调用该SwingUtilities invokeLater方法。此方法确保在Event Dispatch Thread上创建和执行 Swing 组件。

我创建了一个JFrame. JFrame必须按特定顺序调用这些方法。这是我用于大多数 Swing 应用程序的顺序。

我创建了一个JPanel. 使用JPanelaGridLayout来布置JButtons我创建的 64。

Swing 组件应始终以JPanel. AJFrame有一个默认设置BorderLayout,允许您JPanelsJFrame. 即使有可能,您也不应该将任何 Swing 组件放在JPanelsJScrollPanes直接放在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 回答