gpt4 book ai didi

Java Swing : why must resize frame, 以便可以显示已添加的组件

转载 作者:搜寻专家 更新时间:2023-11-01 01:04:03 25 4
gpt4 key购买 nike

我有一个简单的 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);
}

所以,我的问题是:当我开始这个类(class)时,框架如何才能出现我添加的所有组件,直到我调整框架大小。

谢谢:)

最佳答案

  • JFrame 可见后,不要向 JFrame 添加组件 (setVisible(true))

    <
  • 在框架上调用 setSize() 并不是真正好的做法,而是调用 pack()(导致 JFrame 的大小调整为适合其子组件的首选大小和布局)并让 LayoutManager 处理大小。

  • 使用 EDT (事件派发线程)

  • 调用 JFrame#setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) 正如@Gilbert Le Blanc(对他+1)所说,否则即使在 之后您的 EDT/Initial 线程仍将保持 Activity 状态JFrame关闭

像这样:

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)
}
});
}

关于Java Swing : why must resize frame, 以便可以显示已添加的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12713563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com