package call.gui; import java.awt.Component; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.JTabbedPane; import call.AbstractId; import call.Util; public abstract class AbstractTabs extends AbstractId { protected final JTabbedPane tabs; protected final Lock lock; public AbstractTabs() { this.tabs = new JTabbedPane(); this.lock = new ReentrantLock(); } public Component getComponent() { return tabs; } public void addTab(String name, JComponent component, Icon icon) { lock.lock(); if (tabs.indexOfTab(name) == -1) { CloseableTab.addClosableTab(tabs, component, name, icon); } lock.unlock(); } public void addTab(String name, JComponent component) { lock.lock(); if (tabs.indexOfTab(name) == -1) { CloseableTab.addClosableTab(tabs, component, name, null); } lock.unlock(); } public void showTab(String name) { lock.lock(); int index = tabs.indexOfTab(name); if (index != -1 && tabs.getSelectedIndex() != index) { tabs.setSelectedIndex(index); } lock.unlock(); } public void removeTab(String title) { lock.lock(); int index = CloseableTab.indexOfTab(tabs, title); while (index != -1) { Util.log(this, "index = " + index); tabs.remove(index); index = CloseableTab.indexOfTab(tabs, title); } lock.unlock(); } }