添加到面板后,为什么我的组件会消失?

时间:2014-02-03 11:49:26

标签: java jframe jpanel fieldset

所以我有一个jFrame对象,后面又附加了3个JPanel。 这些JPanels位于NORTH,CENTER,SOUTH。 我在CENTER和SOUTH中添加了一些按钮和标签。

我在NORTH和CENTER的一些字段集中添加了一个更漂亮的外观。 现在,当我尝试运行程序时,它没有显示任何内容。我的按钮和标签消失了,我的字段集无处可寻。 我做错了什么?

谢谢你的时间。

public General() {
    super("OmniTool");
    initComponents();
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocation(300,100);
    setVisible(true);
    setResizable(true);
    setSize(900, 700);

    //radiobuttons ivm dependencies
    ButtonGroup dependenciesInfo = new ButtonGroup();
    dependenciesInfo.add(rdbYesDependencies);
    dependenciesInfo.add(rdbNoDependencies);
    //boolean om te controleren of alle textareas al ingevuld zijn 
    generalInfoComplete = false;

    //creating 3 panels and add them on the same frame + giving them their location 
    JPanel oudeMod = new JPanel();
    JPanel nieuweMod = new JPanel();
    JPanel generate = new JPanel();
    this.add(oudeMod,BorderLayout.NORTH);
    this.add(nieuweMod,BorderLayout.CENTER);
    this.add(generate,BorderLayout.SOUTH);
    oudeMod.setBorder(BorderFactory.createTitledBorder("Use exisiting modfolder"));
    nieuweMod.setBorder(BorderFactory.createTitledBorder("Create new modfolder"));

    //adding buttons and textfields to proper panels

    nieuweMod.add(jLabel2);
    nieuweMod.add(jLabel3);
    nieuweMod.add(jLabel4);
    nieuweMod.add(jLabel5);
    nieuweMod.add(jLabel7);
    nieuweMod.add(jLabel8);
    nieuweMod.add(jLabel9);
    nieuweMod.add(jLabel10);
    nieuweMod.add(btnBrowseMain);
    nieuweMod.add(btnBrowseMods);
    nieuweMod.add(btnDependencies);
    nieuweMod.add(rdbNoDependencies);
    nieuweMod.add(rdbYesDependencies);
    nieuweMod.add(txtDependencies);
    nieuweMod.add(txtMainDir);
    nieuweMod.add(txtModName);
    nieuweMod.add(txtModsDir);
    generate.add(btnGenerate);
}

EDIT1:这些jFrame位于1 jtabbedPane。

2 个答案:

答案 0 :(得分:1)

如果“this”是JFrame,则this.add(...)将无效。您应该将组件添加到JFrame的contentPane。

答案 1 :(得分:0)

  

“所以我有一个jFrame对象,它依次连接3个JPanel。这些JPanels放在NORTH,CENTER,SOUTH。我向CENTER和SOUTH添加了一些按钮和标签。”

每个BorderLayout位置只能包含一个组件。如果您向JPanel添加CENTER,则只需将JButton添加到CENTER,只会添加最后添加的组件(JButton)。

将您需要的任何组件添加到最多5个JPanel,并将这些JPanel放在不同的BorderLayout位置。或者您可以使用不同的布局。或者您可以使用主JPanel容器,只需将JPanel添加到框架即可。你有很多选择。


在添加所有组件后,还要执行所有JFrame内务管理。把它们放在构造函数的末尾。

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(300,100);
setVisible(true);
setResizable(true);
setSize(900, 700);

不要设置大小。只需pack()setVisible()应该是你做的最后一件事。

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setResizable(true);
setVisible(true);