Java - Custom PropertyEditorSupport to display units
Posted
by I82Much
on Stack Overflow
See other posts from Stack Overflow
or by I82Much
Published on 2010-05-19T02:17:06Z
Indexed on
2010/05/19
2:20 UTC
Read the original article
Hit count: 366
All,
I'm trying to make the properties of my node have Units associated with the measure. ( I am using the JScience.org implementation of JSR 275) So for instance,
public class Robot extends AbstractNode {
// in kg
float vehicleMass;
@Override
public Sheet createSheet() {
Sheet s = Sheet.createDefault();
Sheet.Set set = s.createPropertiesSet();
try {
PropertySupport.Reflection vehicleMassField = new PropertySupport.Reflection(this, float.class, "vehicleMass");
vehicleMassField.setValue("units", SI.KILOGRAMS);
vehicleMassField.setName("vehicleMass");
set.put(vehicleMassField);
PropertyEditorManager.registerEditor(float.class, UnitInPlaceEditor.class);
} catch (NoSuchMethodException ex) {
Exceptions.printStackTrace(ex);
}
s.put(set);
return s;
}
}
I want my UnitInPlaceEditor to append the units to the end of the string representation of the number, and when the field is clicked (enters edit mode) for the units to disappear and just the number becomes selected for editing. I can make the units appear, but I cannot get the units to disappear when the field enters editing mode.
public class UnitsInplaceEditor extends PropertyEditorSupport implements ExPropertyEditor {
private PropertyEnv pe;
@Override
public String getAsText() {
// Append the unit by retrieving the stored value
}
@Override
public void setAsText(String s) {
// strip off the unit, parse out the number
}
public void attachEnv(PropertyEnv pe) {
this.pe = pe;
}
}
Here's a screenshot of the display - I like it like this..
but here's the value being edited; note the unit stays there.
Basically I want one value (string) to be displayed in the field when the field is NOT being edited, and a different to be displayed when user starts editing the field. Barring that, I'd like to put a constant jlabel for the units (uneditable) to the right of the text field.
Anyone know how to do this?
© Stack Overflow or respective owner