JavaSwing:为什么必须调整框架的大小,以便可以显示添加的组件
我有一个简单的Swing GUI。(不仅如此,还有我所写的所有swing GUI)。当运行它时,它不会显示除空白屏幕以外的任何内容,直到我调整主框架的大小,使每个组件都重新绘制,并且我可以显示它们 以下是我的简单代码:JavaSwing:为什么必须调整框架的大小,以便可以显示添加的组件,java,swing,layout,jframe,jscrollpane,Java,Swing,Layout,Jframe,Jscrollpane,我有一个简单的Swing GUI。(不仅如此,还有我所写的所有swing GUI)。当运行它时,它不会显示除空白屏幕以外的任何内容,直到我调整主框架的大小,使每个组件都重新绘制,并且我可以显示它们 以下是我的简单代码: public static void main(String[] args) { JFrame frame = new JFrame("JScroll Pane Test"); frame.setVisible(true); fra
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);
}
所以,我的问题是:当我开始这个类时,框架将显示我添加的所有组件,直到我调整框架的大小
谢谢:)- 在
可见(JFrame
)之后,不要将组件添加到setVisible(true)
)JFrame
- 在框架上调用
,而不是调用setSize()
pack()
- 使用(事件调度线程) < > >调用<代码> jFraseStErrEfftCuteleCuffic(jFr.ExtIONONONROXY)< /C> > @ Gilbert Le Blanc(+ 1),否则您的EDT/初始线程将保持活跃,即使在<代码> JFrase>代码>已被关闭
public static void main(String[] args) {
//Create GUI on EDT Thread
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("JScroll Pane Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextArea txtNotes = new JTextArea();
txtNotes.setText("Hello World");
JScrollPane scrollPane = new JScrollPane(txtNotes);
frame.add(scrollPane);//add components
frame.pack();
frame.setVisible(true);//show (after adding components)
}
});
}
您的简单代码缺少一些内容 您必须调用
SwingUtilities
将Swing组件放到事件调度线程上
您应该在JFrame
上调用setDefaultCloseOperation
您必须以正确的顺序调用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());
}
}
我想你的意思是“在框架可见后不要向框架添加组件”,非常感谢@DavidKroukamp的帮助