diff options
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/examples/ButtonPanel.java')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/examples/ButtonPanel.java | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/examples/ButtonPanel.java b/Master/Reference Architectures and Patterns/hjp5/examples/ButtonPanel.java new file mode 100644 index 0000000..2125aca --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/examples/ButtonPanel.java @@ -0,0 +1,154 @@ +/* ButtonPanel.java */
+
+import java.awt.*;
+import java.awt.event.*;
+import java.beans.*;
+import java.io.*;
+
+public class ButtonPanel
+extends Panel
+implements Serializable, ItemListener
+{
+ //---Instanzvariablen------------------------------------
+ protected CheckboxGroup cbg;
+ protected Checkbox[] cb;
+ transient protected PropertyChangeSupport pcs;
+
+ //---Methoden--------------------------------------------
+ public ButtonPanel()
+ {
+ cbg = new CheckboxGroup();
+ cb = new Checkbox[0];
+ initTransientState();
+ }
+
+ //---Anzahl der RadioButtons-----------------------------
+ public void setButtonCnt(int cnt)
+ {
+ if (cnt != cb.length) {
+ int oldvalue = cb.length;
+ //Bisherige Buttons entfernen
+ if (cb.length > 0) {
+ removeAll();
+ }
+ cb = new Checkbox[cnt];
+ setLayout(new GridLayout(cnt, 1));
+ for (int i = 0; i < cnt; ++i) {
+ cb[i] = new Checkbox(
+ "RadioButton " + i,
+ cbg,
+ (i == 0 ? true : false)
+ );
+ cb[i].addItemListener(this);
+ add(cb[i]);
+ }
+ //PropertyChangeEvents senden
+ pcs.firePropertyChange("buttonCnt", oldvalue, cnt);
+ if (cnt > 0) {
+ setSelected(0);
+ }
+ //Neu layouten
+ setSize(getPreferredSize());
+ invalidate();
+ doLayout();
+ Container owner = getParent();
+ if (owner != null) {
+ owner.invalidate();
+ owner.doLayout();
+ }
+ }
+ }
+
+ public int getButtonCnt()
+ {
+ return cb.length;
+ }
+
+ //---Beschriftung der Buttons----------------------------
+ public void setLabel(int index, String label)
+ {
+ if (index >= 0 && index < cb.length) {
+ cb[index].setLabel(label);
+ }
+ }
+
+ public String getLabel(int index)
+ {
+ String ret = "***invalid index***";
+ if (index >= 0 && index < cb.length) {
+ ret = cb[index].getLabel();
+ }
+ return ret;
+ }
+
+ //---Selektiertes Element--------------------------------
+ public void setSelected(int index)
+ {
+ if (index >= 0 && index < cb.length) {
+ int oldvalue = getSelected();
+ cb[index].setState(true);
+ pcs.firePropertyChange("selected", oldvalue, index);
+ }
+ }
+
+ public int getSelected()
+ {
+ int ret = -1;
+ for (int i = 0; i < cb.length; ++i) {
+ if (cb[i].getState()) {
+ ret = i;
+ break;
+ }
+ }
+ return ret;
+ }
+
+ //---Verwaltung der PropertyChangeListener---
+ public void addPropertyChangeListener(
+ PropertyChangeListener l
+ )
+ {
+ pcs.addPropertyChangeListener(l);
+ }
+
+ public void removePropertyChangeListener(
+ PropertyChangeListener l
+ )
+ {
+ pcs.removePropertyChangeListener(l);
+ }
+
+ //---Reaktion auf Zustandsänderungen---------------------
+ public void itemStateChanged(ItemEvent event)
+ {
+ Checkbox changedcb = (Checkbox) event.getItemSelectable();
+ if (changedcb.getState()) {
+ for (int i = 0; i < cb.length; ++i) {
+ if (cb[i] == changedcb) {
+ pcs.firePropertyChange("selected", -1, i);
+ break;
+ }
+ }
+ }
+ }
+
+ //---Private Methoden------------------------------------
+ /**
+ * Initialisierung der nicht-persistenten Instanzvariablen.
+ */
+ private void initTransientState()
+ {
+ pcs = new PropertyChangeSupport(this);
+ }
+
+ /**
+ * Wird überlagert, um nach dem Deserialisieren den transienten
+ * Zustand zu initialisieren.
+ */
+ private void readObject(ObjectInputStream stream)
+ throws IOException, ClassNotFoundException
+ {
+ stream.defaultReadObject();
+ initTransientState();
+ }
+}
\ No newline at end of file |
