首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swing gui不显示,但没有错误?

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

Stack Overflow用户
提问于 2013-05-21 06:55:23
回答 3查看 9.2K关注 0票数 0

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

当我尝试运行该程序时,什么也没有发生。没有显示错误消息,但gui也不显示。它会立即终止。

到目前为止,我的代码如下:

Gui类:

代码语言:javascript
复制
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;

        }
    }

}

主类:

代码语言:javascript
复制
package sudoku;

public class SudokuSolver {

    public static void main(String[] args) {

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

    }

}

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

EN

回答 3

Stack Overflow用户

发布于 2013-05-21 06:58:22

应用程序中没有正在使用的可显示窗口,例如JFrame

代码语言:javascript
复制
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中的隐藏变量,因此请使用后者。还要覆盖getPreferredSize,以便在调用frame.pack()时为board提供一个大小。

票数 5
EN

Stack Overflow用户

发布于 2013-05-21 06:58:34

首先让GUIJFrame进行扩展。然后在你的main方法中调用gui.setVisible(true);

代码语言:javascript
复制
public class Gui extends JFrame { }

然后在main中。

代码语言:javascript
复制
Gui gui = new Gui();
gui.load();
gui.setVisible(true);
票数 2
EN

Stack Overflow用户

发布于 2013-05-21 13:08:38

您不能直接显示Jpanel。对于show gui,您必须使用JFrame或任何其他窗口类(JDialog,JWindow...)然后将可见属性设置为true。

setVisible(真);

代码语言:javascript
复制
public class Gui extends JFrame {
       Gui(){
           ...
           setVisible(true);
           setSize(300,400);
        }
        ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16659629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档