From 830fb39115bd8cd29011f2cc5be5b553703f2f02 Mon Sep 17 00:00:00 2001 From: Harald Wolff Date: Tue, 6 Sep 2016 11:52:10 +0200 Subject: [PATCH] bitfields: update --- src/org/hwo/bitfields/BitField.java | 48 +++++++++++++++++-- src/org/hwo/bitfields/Field.java | 2 +- src/org/hwo/bitfields/ui/BitFieldEditor.java | 39 ++++++++++++++- src/org/hwo/bitfields/ui/BoolFieldEditor.java | 12 +++++ 4 files changed, 95 insertions(+), 6 deletions(-) diff --git a/src/org/hwo/bitfields/BitField.java b/src/org/hwo/bitfields/BitField.java index 279c13e..3508a36 100644 --- a/src/org/hwo/bitfields/BitField.java +++ b/src/org/hwo/bitfields/BitField.java @@ -1,15 +1,20 @@ package org.hwo.bitfields; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class BitField { private List fields; - + private List changeListeners; + public BitField() { this.fields = new ArrayList(); @@ -19,6 +24,8 @@ public class BitField { public BitField(Element fieldsNode) { this.fields = new ArrayList(); + this.initialize(); + this.clear(); if (fieldsNode != null) { @@ -28,10 +35,26 @@ public class BitField { private void initialize() { - for (int i=0;i<32;i++) + this.changeListeners = new LinkedList(); + + for (int i=0;i<4;i++) this.fields.add(new Field(this, i, 1)); } - + + public void addChangeListener(ChangeListener listener){ + this.changeListeners.add(listener); + } + public void removeChangeListener(ChangeListener listener){ + this.changeListeners.remove(listener); + } + + public void fireStateChanged(){ + ChangeEvent ce = new ChangeEvent(this); + for (ChangeListener listener: this.changeListeners){ + listener.stateChanged(ce); + } + } + public void fieldsFromXML(Node fieldsNode){ NodeList fields = ((Element)fieldsNode).getElementsByTagName("Field"); for (int i=0;i>> (Integer.SIZE - len))< changeListeners; + public BitFieldEditor() { setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); + this.changeListeners = new LinkedList(); + } + + public void addChangeListener(ChangeListener listener){ + this.changeListeners.add(listener); + } + public void removeChangeListener(ChangeListener listener){ + this.changeListeners.remove(listener); } + public void fireStateChanged(){ + ChangeEvent ce = new ChangeEvent(this); + for (ChangeListener listener: this.changeListeners){ + listener.stateChanged(ce); + } + } + public Integer getIntValue() { int value = 0; for (FieldControl fc:controls) @@ -35,13 +55,28 @@ public class BitFieldEditor extends JPanel { } } + + @Override + public void stateChanged(ChangeEvent e) { + fireStateChanged(); + } + public BitField getBitField() { return bitField; } public void setBitField(BitField bitField) { + if (this.bitField != null){ + this.bitField.removeChangeListener(this); + } + this.bitField = bitField; + + if (this.bitField != null){ + this.bitField.addChangeListener(this); + } + initializeView(); } diff --git a/src/org/hwo/bitfields/ui/BoolFieldEditor.java b/src/org/hwo/bitfields/ui/BoolFieldEditor.java index 0835c19..29438c2 100644 --- a/src/org/hwo/bitfields/ui/BoolFieldEditor.java +++ b/src/org/hwo/bitfields/ui/BoolFieldEditor.java @@ -2,6 +2,8 @@ package org.hwo.bitfields.ui; import javax.swing.JCheckBox; import javax.swing.JComponent; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import org.hwo.bitfields.Field; @@ -12,7 +14,16 @@ public class BoolFieldEditor extends FieldControl { public BoolFieldEditor(Field field) { + final Field f = field; + checkbox = new JCheckBox(); + checkbox.addChangeListener(new ChangeListener() { + + @Override + public void stateChanged(ChangeEvent e) { + f.getBitField().fireStateChanged(); + } + }); setField(field); } @@ -24,6 +35,7 @@ public class BoolFieldEditor extends FieldControl { @Override void setValue(Integer intValue) { checkbox.setSelected(field.getValue(intValue) != 0); + //field.getBitField().fireStateChanged(); } @Override