Все,Java - Custom PropertyEditorSupport для отображения единиц измерения
Я пытаюсь, чтобы свойства моего узла имели единицы, связанные с мерой. (Я использую реализацию JScience.org из JSR 275) Так, например,
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;
}
}
Я хочу, чтобы мой UnitInPlaceEditor для добавления единицы к концу строкового представления числа, и, когда поле нажата (переходит в режим редактирования), чтобы единицы исчезли, и только номер становится выбранным для редактирования. Я могу сделать единицы измерения, но я не могу заставить единицы исчезнуть, когда поле переходит в режим редактирования.
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;
}
}
Вот скриншот дисплея - Мне нравится, как это .. alt text http://grab.by/grabs/b921a00e5167596c14d9d1d1d359561b.png
но вот значение редактируется; обратите внимание, что устройство остается там. alt text http://grab.by/grabs/81e3aadf8c9b1185adc09e14e91a0aae.png
В принципе, я хочу, чтобы одно значение (строка) отображалось в поле, когда поле НЕ редактируется, а другое отображается, когда пользователь начинает редактировать поле. Если это не так, я хотел бы поместить постоянную jlabel для единиц (uneditable) справа от текстового поля.
Кто-нибудь знает, как это сделать?