2017-03-16 35 views
-1

我在OSX上使用NetBeans 8.2,当我运行我的代码时,我得到一个窗口,它具有正确的标题,但没有组件出现。我确信我的所有框架都设置为可见,但问题仍然存在。JFrame丢失内容GridBagLayout与面板

public Project(){ 
    setTitle("Panel"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(400, 200); 
    setLocationRelativeTo(null); 
    setLayout(new GridBagLayout()); 
    setVisible(true); 

    GridBagConstraints layout = new GridBagConstraints(); 
    layout.gridy = 3; 

    JPanel topPanel = new JPanel(); 
    topPanel.setVisible(true); 
    topPanel.setLayout(new GridLayout(2,1)); 
    topPanel.add(label1); 
    topPanel.add(textField1); 

    JPanel midPanel = new JPanel(); 
    midPanel.setVisible(true); 
    midPanel.setLayout(new GridLayout(1,1)); 
    midPanel.add(button1); 

    JPanel bottomPanel = new JPanel(); 
    bottomPanel.setVisible(true); 
    bottomPanel.setLayout(new GridLayout(2,1)); 
    bottomPanel.add(label2); 
    bottomPanel.add(textField2); 

    add(topPanel); 
    add(midPanel); 
    add(bottomPanel); 
    } 

    public static void main(String[] args) { 
    Project1 frame = new Project1(); 
    } 

回答

1

采取setVisible(true);并使其您可以在构造函数中调用的最后一件事

public Project(){ 
    setTitle("Panel"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(400, 200); 
    setLocationRelativeTo(null); 
    setLayout(new GridBagLayout()); 
    //setVisible(true); 
    //... 
    setVisible(true); 
} 

你也应该确保用户界面是被事件的调度范围内螺纹

内构建
public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      Project1 frame = new Project1(); 
     } 
    }); 
} 

这将有助于防止可能发生的一些奇怪