MouseEvents for a JTabbedPane Tab component are not bleeding through

后端 未结 3 1763
走了就别回头了
走了就别回头了 2021-01-21 07:13

I have a JTabbedPane with a custom tab component. That component contains a JLabel (To display the tab title) and a JButton (A close butto

3条回答
  •  鱼传尺愫
    2021-01-21 07:40

    I don't recall seeing such a problem in the TabComponentsDemo, discussed in How to Use Tabbed Panes. You might compare your code with that example as a reference.

    Addendum: Re-factoring ButtonTabComponent to include getLabel(), this version of runTest() in TabComponentsDemo adds a button that evinces the desired behavior. In particular, each time the button is pressed, the tabs are redrawn to display the enlarged title.

    Update: Modify correct tab component after pane.remove().

    public void runTest() {
        pane.removeAll();
        for (int i = 0; i < tabNumber; i++) {
            final int titleIndex = i;
            String title = "Tab " + titleIndex;
            final JButton button = new JButton("Relabel tab");
            button.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    int index = pane.indexOfComponent(button);
                    ButtonTabComponent btc = (ButtonTabComponent)
                        pane.getTabComponentAt(index);
                    JLabel label = btc.getLabel();
                    pane.setTitleAt(index, label.getText() + titleIndex);
                    label.invalidate();
                    pane.repaint();
                }
            });
            pane.add(title, button);
            initTabComponent(i);
        }
        tabComponentsItem.setSelected(true);
        pane.setTabLayoutPolicy(JTabbedPane.WRAP_TAB_LAYOUT);
        scrollLayoutItem.setSelected(false);
        this.setPreferredSize(new Dimension(500, 200));
        this.pack();
        this.setLocationRelativeTo(null);
        this.setVisible(true);
    }
    

提交回复
热议问题