воскресенье, 4 марта 2012 г.

Closable java tabs

There is no predefined JTabbedPane in Java with closable tabs, so I decided to make it myself.
No doubts, there are a lot of variations of doing this with standard close icons. I wanted to make it in such a way, that only when you double click on tab - it closes.

Code:


import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;


/**
 *
 * @author Aloren
 */
public class CloseTabbedPane extends JTabbedPane {


    public CloseTabbedPane() {
        super();
        tabbedPane.addMouseListener(new CloseMouseListener(handler));
    }


    private static class CloseMouseListener extends MouseAdapter {


        int oldIndex;


        public CloseMouseListener() {
        }


        @Override
        public void mouseClicked(MouseEvent e) {
            CloseTabbedPane pane = (CloseTabbedPane)e.getSource();
            int i = pane.indexAtLocation(e.getX(), e.getY());
            if (e.getClickCount() == 2) {
                if (i != -1) {
                    pane.remove(i);
                    if (pane.getTabCount() == 0) {
                        ((JFrame) SwingUtilities.getRoot(pane)).dispose();
                        System.exit(0);
                    }
                }
            } else {
                pane.getModel().setSelectedIndex(i);
            }
        }
    }
}