/* * Copyright 2010-2015 Institut Pasteur. * * This file is part of Icy. * * Icy is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Icy is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Icy. If not, see <http://www.gnu.org/licenses/>. */ package icy.gui.component; import java.awt.Color; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.Icon; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.SwingConstants; /** * Basically a JTabbedPane with checkbox in tab. * * @author Stephane */ public class CheckTabbedPane extends JTabbedPane { /***/ private static final long serialVersionUID = 1274171822668858593L; private class CheckTabComponent extends JPanel { /** * */ private static final long serialVersionUID = 4841789742300589373L; final private JCheckBox checkBox; final private JLabel label; public CheckTabComponent(String title, Icon icon) { super(); setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS)); setBorder(BorderFactory.createEmptyBorder()); setOpaque(false); checkBox = new JCheckBox(null, null, defaultSelected); checkBox.setBorder(BorderFactory.createEmptyBorder()); checkBox.setFocusable(false); checkBox.setToolTipText("enable / disable"); checkBox.setOpaque(false); checkBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionevent) { CheckTabbedPane.this.fireStateChanged(); } }); label = new JLabel(" " + title, icon, SwingConstants.CENTER); label.setOpaque(false); add(checkBox); add(label); validate(); } public boolean isSelected() { return checkBox.isSelected(); } public void setSelected(boolean value) { checkBox.setSelected(value); } public void setTitle(String title) { label.setText(" " + title); } public void setIcon(Icon icon) { label.setIcon(icon); } public void setDisabledIcon(Icon disabledIcon) { label.setDisabledIcon(disabledIcon); } public void setBackgroundAll(Color background) { checkBox.setBackground(background); label.setBackground(background); } public void setForegroundAll(Color foreground) { checkBox.setForeground(foreground); label.setForeground(foreground); } } /** * default checkbox selected state */ boolean defaultSelected; /** * Constructor. * * @param defaultSelected * by default checkbox is selected * @see JTabbedPane */ public CheckTabbedPane(int tabPlacement, boolean defaultSelected) { super(tabPlacement); this.defaultSelected = defaultSelected; } public boolean isDefaultSelected() { return defaultSelected; } public void setDefaultSelected(boolean defaultSelected) { this.defaultSelected = defaultSelected; } @Override protected void fireStateChanged() { // just to avoid warning super.fireStateChanged(); } /** * Returns the check state of tab component at <code>index</code>. * * @param index * the tab index where the check state is queried * @return true if tab component at <code>index</code> is checked, false * otherwise * @exception IndexOutOfBoundsException * if index is out of range (index < 0 || index >= tab count) * @see #setTabChecked(int, boolean) */ public boolean isTabChecked(int index) { return ((CheckTabComponent) getTabComponentAt(index)).isSelected(); } /** * Set the check state of tab component at <code>index</code>. * * @param index * the tab index we want to set the check state * @param value * the check state * @exception IndexOutOfBoundsException * if index is out of range (index < 0 || index >= tab count) * @see #isTabChecked(int) */ public void setTabChecked(int index, boolean value) { ((CheckTabComponent) getTabComponentAt(index)).setSelected(value); } @Override public void setIconAt(int index, Icon icon) { super.setIconAt(index, icon); ((CheckTabComponent) getTabComponentAt(index)).setIcon(icon); } @Override public void setDisabledIconAt(int index, Icon disabledIcon) { super.setDisabledIconAt(index, disabledIcon); ((CheckTabComponent) getTabComponentAt(index)).setDisabledIcon(disabledIcon); } @Override public void setBackgroundAt(int index, Color background) { super.setBackgroundAt(index, background); ((CheckTabComponent) getTabComponentAt(index)).setBackgroundAll(background); } @Override public void setForegroundAt(int index, Color foreground) { super.setForegroundAt(index, foreground); ((CheckTabComponent) getTabComponentAt(index)).setForegroundAll(foreground); } @Override public void setTitleAt(int index, String title) { super.setTitleAt(index, title); ((CheckTabComponent) getTabComponentAt(index)).setTitle(title); } @Override public void insertTab(String title, Icon icon, Component component, String tip, int index) { super.insertTab(title, icon, component, tip, index); setTabComponentAt(index, new CheckTabComponent(title, icon)); } }