嵌套 for 循环将为黑白棋游戏的每个图块创建带有 JButton 的 8x8 网格

问题描述

我需要使用两个嵌套的 for 循环创建一个 8x8 网格,其中每个图块都是一个 JButton。我试了又试,但无法完成。 黑白棋(黑白棋)作业需要。

解决方法

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

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

Othello GUI

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

我创建了一个 JFrameJFrame 方法必须按特定顺序调用。这是我在大多数 Swing 应用程序中使用的顺序。

我创建了一个 JPanelJPanel 使用 GridLayout 来布置我创建的 64 个 JButtons

Swing 组件应始终构建在 JPanel 中。 JFrame 有一个默认的 BorderLayout,允许您在 JPanels 上放置最多九个 JFrame。即使有可能,您也不应该将除 JPanelsJScrollPanes 以外的任何 Swing 组件直接放置在 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));
        
        for (int index = 0; index < 64; index++) {
            JButton button = new JButton();
            button.setPreferredSize(new Dimension(64,64));
            panel.add(button);
        }
        
        return panel;
    }

}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...