java - Swing gui 不显示,但没有错误?

标签 java swing user-interface

我正在开发一个解决数独难题的 java 程序。到目前为止,我编写的只是一个用 swing 绘制棋盘的类,以及另一个调用 gui 类的类。

当我尝试运行该程序时,没有任何反应。没有显示错误消息,但 GUI 也不显示。它立即终止。

这是迄今为止我的代码:

GUI 类:

package sudoku;

import java.awt.*;
import javax.swing.*;

public class Gui {

    Gui gui;
    JPanel board;
    JPanel subBoard[][];
    GridLayout layout;
    JLabel square[][];

    public void load() {

        gui = new Gui();
        gui.setUp();
        gui.buildBoard();

    }

    private void setUp() {

        layout = new GridLayout(3, 3);
        board = new JPanel(layout);
        subBoard = new JPanel[3][3];
        square = new JLabel[9][9];

    }

    private void buildBoard() {

        // set up board
        board.setSize(800, 600);
        board.setVisible(true);

        int mod = 0;
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {

                // add subBoards to board
                subBoard[i][j] = new JPanel();
                board.add(subBoard[i][j]);
                subBoard[i][j].setLayout(layout);
                subBoard[i][j].setVisible(true);

                // add textfields to each subBoard
                square[i + mod][j + mod] = new JLabel();
                subBoard[i][j].add(square[i + mod][j + mod]);
                square[i + mod][j + mod].setVisible(true);

            }
            mod += 3;

        }
    }

}

主类:

package sudoku;

public class SudokuSolver {

    public static void main(String[] args) {

        Gui gui = new Gui();
        gui.load();

    }

}

我尝试在 eclipse 和 netbeans 中运行它,但两次都得到相同的结果。为什么这不起作用?

最佳答案

应用程序中没有使用诸如 JFrame 之类的可显示窗口。

EventQueue.invokeLater(new Runnable() {
   @Override
   public void run() {
      JFrame frame = new JFrame("New GUI");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      Gui gui = new Gui();
      gui.load();
      frame.add(gui.getBoard()); // add getBoard getter
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }
});

删除Gui中的类成员变量gui。这是外部类 Gui 中的隐藏变量,因此请使用后者。调用 frame.pack() 时,还要重写 getPreferredSize 来为 board 指定大小。

关于java - Swing gui 不显示,但没有错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16659629/

相关文章:

java - Android:使用一个套接字连接跨所有 Activity

java - 通过 java (MS SQL) 中的存储过程提取 XML 自动数据

java - 尝试使用 objectdraw 运行 java 程序时出现线程 "main"错误异常

java - 有选择地隐藏面板

multithreading - JavaFX 使用线程和 GUI

Java:字符串操作

java - Swing 监听子布局的变化

java - 如何更改 NetBeans 平台框架应用程序的 LookAndFeel

java - 无法在矩形顶部创建按钮

c++ - 如何在列表框窗口过程中捕获 VK_ESCAPE