【发布时间】:2014-09-22 04:34:42
【问题描述】:
经过大量研究后,我似乎找不到任何问题所在。我正在创建一个程序,用户可以在其中选择他们想要使用的选项卡 (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 个 JPanel,依此类推...
更新
这是我朋友程序的原始代码的一部分:
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,但很遗憾,我无法理解它
【问题讨论】:
-
我不太清楚你在做什么。通常,您会提前创建不同的面板,然后将每个面板作为其自己的选项卡添加到 tabbedPane 上。这一切都将在 GUI 显示之前完成。听起来您正在通过在用户单击选项卡时动态创建内容来重新发明轮子。你想完成什么?
-
我已经创建了不同的面板。在示例代码中,我有 3 个不同的面板,每个面板都有自己的表单和代码(AddEvent()、EditEvent() 和 DeleteEvent())。该示例代码又位于另一个具有 JTabbedPane (tabEvents) 的文件 (JFrame) 中。我现在要做的是在 JTabbedPane 中为用户显示这些单独的面板。
-
为了尽快获得更好的帮助,请发布一个 Minimal Complete Example 来演示问题,而不仅仅是一个代码 sn-p。
-
这是文件中唯一的代码。我不确定如何证明这个问题。这实际上是从朋友的程序中复制的代码。他改用 BorderLayout,但这并没有使面板居中
-
我更新了 BorderLayout sn-p。我真的不知道如何在另一个容器中显示不同的面板
标签: java swing netbeans jpanel center