使用GridBoxLayout将JPanel居中是重复添加JPanel

时间:2014-07-30 13:42:07

标签: java swing netbeans jpanel center

经过大量的研究,我似乎找不到任何问题。我正在创建一个程序,用户可以选择他们想要使用的选项卡(JTabbedPane)。在该选项卡中,我有一个JPanel,当用户选择选项卡时,我将其添加到选项卡。

private void tabEventsStateChanged(javax.swing.event.ChangeEvent evt) {                                       
    if (tabEvents.getSelectedComponent().equals(tabAddEvent)) {
        JPanel jp = new AddEvent();
        tabAddEvent.setLayout(new GridBagLayout());
        tabAddEvent.add(jp);
        tabAddEvent.updateUI();
    }
    else if (tabEvents.getSelectedComponent().equals(tabEditEvent)) {
        JPanel jp = new EditEvent();
        tabEditEvent.setLayout(new GridBagLayout());
        tabEditEvent.add(jp);
        tabEditEvent.updateUI();
    }
else if (tabEvents.getSelectedComponent().equals(tabDeleteEvent)) {
        JPanel jp = new DeleteEvent();
        tabDeleteEvent.setLayout(new GridBagLayout());
        tabDeleteEvent.add(jp);
        tabDeleteEvent.updateUI();
    }
else {
    System.out.println("Error! Tab Not Selected!");
}
}

JPanels中心完美。但是,当我在tabAddEvent之后单击tabEditEvent(或tabDeleteEvent)然后返回tabAddEvent时,我很沮丧地发现,JPanel再次添加。这创建了一个奇怪的UI,我有2个相同的形式并排放置,不再位于中心...与tabEditEvent和tabDeleteEvent相同。如果我点击任何标签3次,我将有3个JPanels添加到容器中,依此类推......

更新

这是我朋友计划原始代码的一部分:

else if (tabEvents.getSelectedComponent().equals(tabEditEvent)) {
        JPanel jp = new EditEvent();
        tabEditEvent.setLayout(new BorderLayout());
        tabEditEvent.add(jp, BorderLayout.CENTER);
        tabEditEvent.updateUI();
    }

更新2

为了解决这个问题的绝望尝试,我已经截取了结果的截图,以便您可以看到我想要描述的内容。 https://www.dropbox.com/s/isj5iezwcak1bfn/Untitled-1.png
https://www.dropbox.com/s/rywe1e5hgx7c88x/Untitled-2.png

我试着看看CardLayout,不幸的是,我无法绕过它

3 个答案:

答案 0 :(得分:2)

public void updateUI()
Resets the UI property with a value from the current look and feel.
Overrides:
updateUI in class JComponent
See Also:
JComponent.updateUI()

  1. 使用CardLayout代替添加/删除JComponents

  2. 在您必须重复添加/删除tabDeleteEvent.revalidate();的情况下完成对已经可见的Swing GUI的所有更改后,调用代码行tabDeleteEvent.repaint();JComponents

答案 1 :(得分:0)

我认为重复的原因是你每次都要添加新的面板。将面板添加到类的构造函数中,然后在上面代码中的选项卡之间导航。

答案 2 :(得分:0)

一位朋友帮帮我并告诉我使用布尔if语句来查明我是否已经添加了面板

if (tabEvents.getSelectedComponent().equals(tabAddEvent)) {
        JPanel jp = new AddEvent();
    if (initializedAdd == false) {
    tabAddEvent.setLayout(new GridBagLayout());
    tabAddEvent.add(jp);
    initializedAdd = true;
    }
    }

工作得很好!一旦这个项目完成,我将会仔细研究所有的布局!

感谢大家的帮助。