package cryodex.widget; import java.awt.Component; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JLabel; import javax.swing.JTabbedPane; /** * This widget is a tabbed pane that has an extra tab at the end that can be * used for creating a new tab. The function triggerEvent must be implemented * and is called when that tab is clicked. * * @author cbrown * */ public abstract class AddTabTabbedPane extends JTabbedPane { private static final long serialVersionUID = 1L; private JLabel placeHolder; public AddTabTabbedPane(String addTabText) { super.addTab(addTabText, getPlaceHolder()); addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (getSelectedComponent() == getPlaceHolder()) { triggerEvent(); } } }); } private JLabel getPlaceHolder() { if (placeHolder == null) { placeHolder = new JLabel(); } return placeHolder; } @Override public void setSelectedIndex(int index) { super.setSelectedIndex(index); } @Override public void addTab(String title, Component component) { int count = getTabCount(); if (count == 0) { count = 1; } add(component, count - 1); setTitleAt(count - 1, title); setSelectedComponent(component); } public abstract void triggerEvent(); }