Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaSwing:为什么必须调整框架的大小,以便可以显示添加的组件_Java_Swing_Layout_Jframe_Jscrollpane - Fatal编程技术网

JavaSwing:为什么必须调整框架的大小,以便可以显示添加的组件

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

我有一个简单的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);
}
所以,我的问题是:当我开始这个类时,框架将显示我添加的所有组件,直到我调整框架的大小

谢谢:)

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

}

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

您必须调用
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());
    }

}

我想你的意思是“在框架可见后不要向框架添加组件”感谢alot@DavidKroukamp的帮助我想你的意思是“在框架可见后不要向框架添加组件”感谢alot@DavidKroukamp的帮助