我在使用以下代码时遇到问题:

public void detachTab(TabComponent tc) {
    Logger.add("Detaching Tab");
    for (int i = 0; i < globalTabbedPane.getTabCount(); i++) {
        if (tc == globalTabbedPane.getTabComponentAt(i)) {
            Logger.add("Detaching panel: " + i);
            SeparateWindow sw = new SeparateWindow((JPanel) globalTabbedPane.getComponentAt(i));
            sw.setVisible(true);

            globalTabbedPane.remove(i);
            return;
        }
    }
}


它只是从JTabbedPane中删除选项卡,并将其放置在单独的窗口中。漂亮的自我解释。问题在于该方法还会删除其下方的选项卡。我不知道这怎么可能。也许有些事我忽略了。

最佳答案

我没有测试过,但是...

SeparateWindow sw = new SeparateWindow((JPanel) globalTabbedPane.getComponentAt(i))


可能将Component添加到窗口中,将其从JTabbedPane中删除​​,则选项卡式窗格可能正在删除关联的选项卡,这意味着索引位置已更改,因此当您调用

globalTabbedPane.remove(i);


您现在要删除以下标签...

您可以尝试获取对该组件的引用,将其删除并创建窗口。

JPanel pane = (JPanel) globalTabbedPane.getComponentAt(i);
globalTabbedPane.remove(i);
SeparateWindow sw = new SeparateWindow(pane);

10-06 02:40