20 package net.sf.gridarta.gui.utils.tabbedpanel;
22 import java.awt.Component;
23 import java.awt.Container;
24 import java.util.ArrayList;
25 import java.util.Collection;
26 import java.util.List;
27 import java.util.concurrent.CopyOnWriteArrayList;
28 import javax.swing.AbstractButton;
29 import javax.swing.BoxLayout;
30 import javax.swing.JPanel;
31 import javax.swing.event.ChangeEvent;
32 import javax.swing.event.ChangeListener;
34 import org.jetbrains.annotations.NotNull;
35 import org.jetbrains.annotations.Nullable;
48 private final Container
buttons =
new JPanel();
54 private final Collection<ButtonListListener>
listeners =
new CopyOnWriteArrayList<>();
71 public void stateChanged(
final ChangeEvent e) {
72 final AbstractButton button = (AbstractButton) e.getSource();
73 if (button.isSelected()) {
107 public void addButton(@NotNull
final AbstractButton button) {
108 if (button.isSelected()) {
109 throw new IllegalArgumentException(
"can't add a selected button");
112 final String title = button.getText();
114 for (index = 0; index <
buttons.getComponentCount(); index++) {
115 final Component tmp =
buttons.getComponent(index);
116 if (tmp instanceof AbstractButton) {
117 final AbstractButton tmpButton = (AbstractButton) tmp;
118 final Comparable<String> tmpTitle = tmpButton.getText();
119 if (tmpTitle.compareTo(title) > 0) {
160 button.setSelected(
true);
161 if (prevSelectedButton !=
null) {
162 prevSelectedButton.setSelected(
false);
174 listener.selectedButtonChanged(prevSelectedButton, selectedButton);
201 return buttons.getComponentCount();