Java Swing:为什么必须调整框架大小,以便显示组件已添加

时间:2012-10-03 17:18:09

标签: 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);
        frame.setSize(new Dimension(800, 600));

        JTextArea txtNotes = new JTextArea();
        txtNotes.setText("Hello World");
        JScrollPane scrollPane = new JScrollPane(txtNotes);
        frame.add(scrollPane);
}

所以,我的问题是:当我开始这个课时,框架会出现我添加的所有组件,直到我调整框架大小。

谢谢:)

2 个答案:

答案 0 :(得分:13)

  • JFrame可见后JFrame

  • ,请勿向setVisible(true)添加组件
  • 在框架上调用setSize()而不是调用pack()(导致JFrame的大小适合其子组件的首选大小和布局)并且{ {1}}处理大小。

  • 使用EDT(事件 - 调度 - 线程)

  • 按照@Gilbert Le Blanc(+1给他)的说法致电LayoutManager,否则即使JFrame#setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)已关闭

像这样:

JFrame

答案 1 :(得分:5)

您的简单代码缺少一些内容。

您必须调用SwingUtilities将Swing组件放在事件派发线程上。

您应该致电setDefaultCloseOperation上的JFrame

您必须按正确的顺序调用JFrame方法。调用setSizepack方法,然后最后调用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());
    }

}