为什么我必须重新调整 JFrame 的大小才能看到组件

why do i have to re-size JFrame to see the component

我有一个小问题 JFrame 中的组件不显示,直到我重新调整框架的大小然后所有组件都可见但缺少某些东西我不知道在哪里有人可以告诉我问题出在哪里

import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JToolBar;
    import javax.swing.border.TitledBorder;

    /**
     *
     * @author isslam
     */
    public class swingInterface extends JFrame{
        JToolBar bar;
        //toolbar button
        JButton openButton,exitButton;
        JTable table;
        public swingInterface(){
        JFrame frame = new JFrame();
        frame.setVisible(true);
        frame.setSize(500,500);
        frame.setLocation(400, 100);
        frame.setLayout(new BorderLayout());
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
         // declration of bar
        bar = new JToolBar("still dragble");

        openButton = new JButton();
        exitButton = new JButton();
        openButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/open-file-icon.png")));
        exitButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/res/logout-icon.png")));
        bar.add(openButton);
        bar.add(exitButton);
        //panel for jtable
        String[] columnNames = {"First Name",
                            "Last Name",
                            "Sport",
                            "# of Years",
                            "Vegetarian"};
        Object[][] data = {
        {"Kathy", "Smith",
         "Snowboarding", new Integer(5), new Boolean(false)},
        {"John", "Doe",
         "Rowing", new Integer(3), new Boolean(true)},
        {"Sue", "Black",
         "Knitting", new Integer(2), new Boolean(false)},
        {"Jane", "White",
         "Speed reading", new Integer(20), new Boolean(true)},
        {"Joe", "Brown",
         "Pool", new Integer(10), new Boolean(false)}
    };
        table = new JTable(data,columnNames);
        JScrollPane spanel = new  JScrollPane(table);
        TitledBorder titled = new TitledBorder("Title");
        JPanel panel = new JPanel(new BorderLayout());
        panel.setBorder(titled); 
        panel.setBackground(pink);
         panel.add(spanel,BorderLayout.CENTER);


         frame.add(bar,BorderLayout.NORTH);
         frame.add(panel,BorderLayout.CENTER);

        }
    }

您在向框架添加所有需要的组件之前调用框架的 setVisible(true) 方法。将调用移至构造函数的末尾。

public swinginterface {
    // adding components to the JFrame
    frame.setVisible(true);
}