From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../hjp5/examples/ButtonPanel.java | 154 +++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 Master/Reference Architectures and Patterns/hjp5/examples/ButtonPanel.java (limited to 'Master/Reference Architectures and Patterns/hjp5/examples/ButtonPanel.java') 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 -- cgit v1.2.3