Java Swing : why must resize frame, so that can show components have added

后端 未结 2 896
傲寒
傲寒 2020-11-28 15:53

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 e

2条回答
  •  庸人自扰
    2020-11-28 16:07

    • Do not add components to JFrame after the JFrame is visible (setVisible(true))

    • Not really good practice to call setSize() on frame rather call pack() (Causes JFrame to be sized to fit the preferred size and layouts of its subcomponents) and let LayoutManager handle the size.

    • Use EDT (Event-Dispatch-Thread)

    • 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 after JFrame has been closed

    Like so:

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

提交回复
热议问题