package magic.ui.widget; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JPanel; import javax.swing.JToggleButton; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @SuppressWarnings("serial") public class TabSelector extends JPanel implements ActionListener { private static final Dimension VERTICAL_BUTTON_DIMENSION=new Dimension(24,24); private final JPanel buttonPanel; private final List<JToggleButton> buttons; private final ChangeListener listener; private int selectedTab; private final Dimension buttonDimension; private final Color backgroundColor; private boolean isUserClick = false; public TabSelector(final ChangeListener listener, final Color backgroundColor0) { this.listener=listener; this.backgroundColor = (backgroundColor0 == null ? getBackground() : backgroundColor0); selectedTab=0; setOpaque(false); setLayout(new BorderLayout()); buttonPanel = new TexturedPanel(); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS)); add(buttonPanel, BorderLayout.NORTH); buttonDimension = VERTICAL_BUTTON_DIMENSION; buttons=new ArrayList<>(); } public TabSelector(final ChangeListener listener) { this(listener, null); } public int getSelectedTab() { return selectedTab; } public void setSelectedTab(final int selectedTab, final boolean showFullScreen) { this.selectedTab=selectedTab; showTab(buttons.get(selectedTab), showFullScreen); } public void setSelectedTab(final int selectedTab) { setSelectedTab(selectedTab, false); } public void addTab(final ImageIcon icon,final String toolTip) { final JToggleButton button=new JToggleButton(icon); button.setToolTipText(null); button.setBackground(this.backgroundColor); button.setFocusable(false); button.setPreferredSize(buttonDimension); button.setActionCommand(Integer.toString(buttons.size())); button.addActionListener(this); buttons.add(button); buttonPanel.add(button); if (buttons.size()==1) { showTab(button); } } private void showTab(final JToggleButton selectedButton) { showTab(selectedButton, false); } private void showTab(final JToggleButton selectedButton, final boolean userClick) { this.isUserClick = userClick; for (final JToggleButton button : buttons) { button.setSelected(button==selectedButton); } selectedTab=Integer.parseInt(selectedButton.getActionCommand()); listener.stateChanged(new ChangeEvent(selectedButton)); } @Override public void actionPerformed(final ActionEvent event) { showTab((JToggleButton)event.getSource(), true); } public boolean isUserClick() { return isUserClick; } public void setIsUserClick(final boolean b) { this.isUserClick = b; } }