[英]Swing gui not displaying, but no errors?
我正在研究解决数独难题的Java程序。 到目前为止,我所编写的只是一个用秋千绘制木板的类,以及另一个称为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
隐藏了变量,因此请改用后者。 也覆盖getPreferredSize
,得到board
的尺寸时frame.pack()
被调用。
首先使GUI
扩展JFrame
。 然后在您的主要方法中调用gui.setVisible(true);
。
public class Gui extends JFrame { }
然后在主要。
Gui gui = new Gui();
gui.load();
gui.setVisible(true);
您不能直接显示Jpanel。 对于show gui,您必须使用JFrame或任何其他Window类(JDialog,JWindow ...),然后将visible属性设置为true。
setVisible(true);
public class Gui extends JFrame {
Gui(){
...
setVisible(true);
setSize(300,400);
}
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.