我有一个简单的Swing GUI。 (而且不仅如此,我编写的所有swing GUI)。当它运行时,除了空白屏幕之外它不会显示任何内容,直到我调整主框架的大小,所以每个组件都再次绘制,我可以显示它们。
这是我的简单代码:
public static void main(String[] args) {
JFrame frame = new JFrame("JScroll Pane Test");
frame.setVisible(true);
frame.setSize(new Dimension(800, 600));
JTextArea txtNotes = new JTextArea();
txtNotes.setText("Hello World");
JScrollPane scrollPane = new JScrollPane(txtNotes);
frame.add(scrollPane);
}
所以,我的问题是:当我开始这个课时,框架会出现我添加的所有组件,直到我调整框架大小。
谢谢:)
答案 0 :(得分:13)
JFrame
可见后JFrame
setVisible(true)
添加组件
在框架上调用setSize()
而不是调用pack()
(导致JFrame
的大小适合其子组件的首选大小和布局)并且{ {1}}处理大小。
使用EDT(事件 - 调度 - 线程)
按照@Gilbert Le Blanc(+1给他)的说法致电LayoutManager
,否则即使JFrame#setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
已关闭1},您的EDT /初始线程仍会保持有效
像这样:
JFrame
答案 1 :(得分:5)
您的简单代码缺少一些内容。
您必须调用SwingUtilities
将Swing组件放在事件派发线程上。
您应该致电setDefaultCloseOperation
上的JFrame
。
您必须按正确的顺序调用JFrame
方法。调用setSize
或pack
方法,然后最后调用setVisible
方法。
public class SimpleFrame implements Runnable {
@Override
public void run() {
JFrame frame = new JFrame("JScroll Pane Test");
JTextArea txtNotes = new JTextArea();
txtNotes.setText("Hello World");
JScrollPane scrollPane = new JScrollPane(txtNotes);
frame.add(scrollPane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(800, 600));
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new SimpleFrame());
}
}