How to add close button to a JTabbedPane Tab?

前端 未结 7 1994
温柔的废话
温柔的废话 2020-11-27 05:09

I\'m working in with a JTabbedPane, I need to add a close button in the tabs to close the current one.

I have been searching and as I understand I must extend from J

7条回答
  •  广开言路
    2020-11-27 05:49

    I made some changes in the code of oracle.

    http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/uiswing/examples/components/TabComponentsDemoProject/src/components/ButtonTabComponent.java

    Giving the possibility to add an icon to the tab , plus the close tab button. Hope that helps.

    public static void addTag(JTabbedPane tab, String title, Icon icon, int index){
         MouseListener close = new MouseAdapter() {
    
            @Override
            public void mouseClicked(MouseEvent e) {
                //your code to remove component
                //I use this way , because I use other methods of control than normal: tab.remove(int index);
            }
    
        };
        final ButtonClose buttonClose = new ButtonClose (title, icon, close );
    
        tab.setTabComponentAt(index, buttonClose);
        tab.validate();
        tab.setSelectedIndex(index);
    

    }

    public class ButtonClose extends JPanel {

    public ButtonClose(final String title, Icon icon, MouseListener e) {
        JLabel ic = new JLabel(icon);
        ic.setSize(icone.getIconWidth(), icone.getIconHeight());
    
        JLabel text= new JLabel(title);
        text.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
    
        ButtonTab button = new ButtonTab();
        button.addMouseListener(e);
        button.setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));
    
        JPanel p = new JPanel();
        p.setSize(getWidth() - icone.getIconWidth(), 15);
        p.add(text);
        p.add(button);
    
        add(ic);
        add(p);
    }
    
    private class ButtonTab extends JButton {
    
        public ButtonTab() {
            int size = 13;
            setPreferredSize(new Dimension(size, size));
            setToolTipText("Close");
    
            setUI(new BasicButtonUI());
    
            setFocusable(false);
            setBorderPainted(false);
    
            addMouseListener(listener);
            setRolloverEnabled(true);
        }
    
        @Override
        public void updateUI() {
        }
    
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g.create();
    
            if (getModel().isPressed()) {
                g2.translate(1, 1);
            }
            g2.setStroke(new BasicStroke(2));
            g2.setColor(new Color(126, 118, 91));
    
            if (getModel().isRollover()) {
                g2.setColor(Color.WHITE);
            }
    
            int delta = 3;
            g2.drawLine(delta, delta, getWidth() - delta - 1, getHeight() - delta - 1);
            g2.drawLine(getWidth() - delta - 1, delta, delta, getHeight() - delta - 1);
            g2.dispose();
        }
    }
    
    private final MouseListener listener = new MouseAdapter() {
        @Override
        public void mouseEntered(MouseEvent e) {
            Component component = e.getComponent();
            if (component instanceof AbstractButton) {
                AbstractButton button = (AbstractButton) component;
                button.setContentAreaFilled(true);
                button.setBackground(new Color(215, 65, 35));
            }
        }
    
        @Override
        public void mouseExited(MouseEvent e) {
            Component component = e.getComponent();
            if (component instanceof AbstractButton) {
                AbstractButton button = (AbstractButton) component;
                button.setContentAreaFilled(false); //transparent
            }
        }
    };
    

    }

提交回复
热议问题