Java Swing:为什么必须调整框架大小,这样才能显示组件已添加
我有一个简单的 Swing GUI.(不仅如此,我写的所有摇摆GUI).运行它时,除了空白屏幕,它什么都不显示,直到我调整主框架的大小,所以每个组件都重新绘制,我可以显示它们.
I have a simple Swing GUI. (and not only this, all swing GUI I have written). When run it, it doesn't show anything except blank screen, until I resize the main frame, so every components have painted again, and I can show them.
这是我的简单代码:
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);
}
所以,我的问题是:当我开始这个课程时,框架会出现我添加的所有组件,直到我调整框架大小.
So, my question is : how can when I start this class, the frame will appear all components I have added, not until I resize frame.
谢谢:)
推荐答案
JFrame可见后不要向JFrame添加组件(setVisible(true))Do not add components to
JFrameafter theJFrameis visible (setVisible(true))在框架上调用
setSize()而不是调用pack()并不是很好的做法(导致JFrame的大小调整为适合其子组件的首选大小和布局)并让LayoutManager处理大小.Not really good practice to call
setSize()on frame rather callpack()(CausesJFrameto be sized to fit the preferred size and layouts of its subcomponents) and letLayoutManagerhandle the size.使用 EDT (Event-Dispatch-线程)
Use EDT (Event-Dispatch-Thread)
调用
JFrame#setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)正如@Gilbert Le Blanc(对他 +1)所说,否则即使在之后,您的 EDT/Initial 线程仍将保持活动状态JFrame已关闭call
JFrame#setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)as said by @Gilbert Le Blanc (+1 to him) or else your EDT/Initial thread will remain active even afterJFramehas been closed像这样:
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) } }); }
相关文章