JSplitPanel(或JTabbedPane)出了什么问题?

Sav*_*sis 2 java swing jtabbedpane

我有两个面板,我希望向用户显示.我决定将它们添加到JTabbedPane中.我还想让用户同时并排查看它们.所以我将两个面板添加到我的JTabbedPane,然后我创建了一个JSplitPanel:

    tabs.addTab("Align Image Points", imageControlPanel);
    tabs.addTab("Align Map Points", mapControlPanel);
    JSplitPane splitPane = new JSplitPane(
            JSplitPane.HORIZONTAL_SPLIT, true, imageControlPanel,
            mapControlPanel);
    tabs.addTab("Side by side view", splitPane);
Run Code Online (Sandbox Code Playgroud)

生成的JTabbedPane只有一个选项卡!当我删除JSplitPane一切正常.两个标签.我然后尝试简化问题发布在这里,我想出了这个:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;

public class Test {

    public static void main(String[] args) {
        JFrame f = new JFrame("Test");
        JButton b1 = new JButton("First");
        JButton b2 = new JButton("Second");
        JSplitPane s = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,b1,b2);
        JTabbedPane tabs = new JTabbedPane();
        tabs.addTab("First", b1);
        tabs.addTab("Second", b2);
        tabs.addTab("Both", s);
        f.getContentPane().add(tabs);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);
    }

}
Run Code Online (Sandbox Code Playgroud)

这给了我另一个问题!它显示3个选项卡,但第三个选项卡的分割窗格显示没有按钮!

所以我的问题是JSplitPanel出了什么问题?您不能显示已在另一个选项卡中显示的对象吗?这没有道理.请帮我.

(注意:我不想复制我要显示的组件,因为我希望它们是相同的参考)

ban*_*ity 6

Swing UI是分层的,您只能将一个组件添加到层次结构中一次.如果将组件添加到多个容器中,则会得到不可预测的结果.你不想复制组件是正确的,但是你需要JTabbedPane上的一个监听器来添加和删除选项卡或JSplitView中的每个组件,因为选项卡的选择会发生变化.

tabs.addChangeListener( new ChangeListener() {
    public void stateChanged(ChangeEvent e) {
        // Reorganise the display based on the current tab selection.
    }
}
Run Code Online (Sandbox Code Playgroud)