How to implement draggable tab using Java Swing?

前端 未结 5 1401
广开言路
广开言路 2020-11-28 09:16

How do I implement a draggable tab using Java Swing? Instead of the static JTabbedPane I would like to drag-and-drop a tab to different position to rearrange the tabs.

5条回答
  •  北海茫月
    2020-11-28 09:41

    @Tony: It looks like Euguenes solution just overlooks preserving TabComponents during a swap.

    The convertTab method just needs to remember the TabComponent and set it to the new tabs it makes.

    Try using this:

        private void convertTab(TabTransferData a_data, int a_targetIndex) {
    
                DnDTabbedPane source = a_data.getTabbedPane();
                System.out.println("this=source? " + (this == source));
                int sourceIndex = a_data.getTabIndex();
                if (sourceIndex < 0) {
                        return;
                } // if
                //Save the tab's component, title, and TabComponent.
                Component cmp = source.getComponentAt(sourceIndex);
                String str = source.getTitleAt(sourceIndex);
                Component tcmp = source.getTabComponentAt(sourceIndex);
    
                if (this != source) {
                        source.remove(sourceIndex);
    
                        if (a_targetIndex == getTabCount()) {
                                addTab(str, cmp);
                                setTabComponentAt(getTabCount()-1, tcmp);
                        } else {
                                if (a_targetIndex < 0) {
                                        a_targetIndex = 0;
                                } // if
    
                                insertTab(str, null, cmp, null, a_targetIndex);
                                setTabComponentAt(a_targetIndex, tcmp);
                        } // if
    
                        setSelectedComponent(cmp);
                        return;
                } // if
                if (a_targetIndex < 0 || sourceIndex == a_targetIndex) {
                        return;
                } // if
                if (a_targetIndex == getTabCount()) {    
                        source.remove(sourceIndex);
                        addTab(str, cmp);
                        setTabComponentAt(getTabCount() - 1, tcmp);
                        setSelectedIndex(getTabCount() - 1);
                } else if (sourceIndex > a_targetIndex) {
                        source.remove(sourceIndex);
                        insertTab(str, null, cmp, null, a_targetIndex);
                        setTabComponentAt(a_targetIndex, tcmp);
                        setSelectedIndex(a_targetIndex);
                } else {
                        source.remove(sourceIndex);
                        insertTab(str, null, cmp, null, a_targetIndex - 1);
                        setTabComponentAt(a_targetIndex - 1, tcmp);
                        setSelectedIndex(a_targetIndex - 1);
                }
    
        }
    

提交回复
热议问题