如何使用绑定枚举设置 RadioButtonGroup 的标签
How to set Labels of RadioButtonGroup with bound Enum
我有一个 RadioButtonGroup<MyEnum>
并且我用枚举设置了项目。单个项目的标签现在是我的枚举的元素。由于代码约定,我的 Enum 元素写得很大。我向我的枚举添加了一个 public String getText(MyEnum e)
方法,我希望 RadioButtonGroup 的标签是这些文本。
我还有几个组合框,它们的元素也来自枚举。 ComboBoxes 有一个方法 setItemLabelGenerator()
,我可以用它来将我的枚举元素文本表示设置为标签。
我的枚举
public enum MyEnum{
OPT1, OPT2, OPT3;
public static String getText(MyEnum e) {
switch(e) {
case OPT1: return "Option 1";
case OPT2: return "Option 2";
case OPT3: return "Option 3";
}
return "";
}
public static Collection<MyEnum > getValues(){
Collection<MyEnum > resultList = new ArrayList<MyEnum >();
resultList.add(OPT1);
resultList.add(OPT2);
resultList.add(OPT3);
}
}
在我的 UI class 中,我的 RadioButtonGroup 的 Enum 元素作为项目:
RadioButtonGroup<MyEnum> myRadioGroup= new RadioButtonGroup<MyEnum>();
myRadioGroup.setItems(MyEnum.getValues());
不幸的是,项目的标签是 "OPT1"、"OPT2" 和 "OPT3",但我希望它们是 "Option 1"、"Option 2" 和 "Option 3".
对于我的组合框,我可以使用 setItemLabelGenerator()
方法来获得漂亮的标签:
ComboBox<MyEnum> myBox= new ComboBox<MyEnum>();
myBox.setItems(MyEnum.getValues());
myBox.setItemLabelGenerator(MyEnum::getText);
我的 ComboBox 中的项目是 "Option 1"、"Option 2" 和 "Option 3"。
有人能告诉我,如何获得与 RadioButtonGroups 的 ComboBoxes 一样的结果吗?我希望我的用户在 UI 中看到漂亮的标签 :-)
默认行为是对 ComboBox
中的对象执行 toString
。那么,为什么不按照您的期望制作 toString
return,或者设置带有 getter 的标签 属性?
enum MyOptions {
OPT1("Option 1"),
OPT2("Option 2"),
OPT3("Option 3");
private final String label;
MyOptions(String label) {
this.label = label;
}
// either use getLabel as your item label generator...
public String getLabel() {
return this.label;
}
// ...or if you don't care about printing in logs etc.
// just override the default toString implementation
public String toString() {
return this.label;
}
}
RadioButtonGroup
没有 setItemLabelGenerator(...)
,但是你可以用 setRenderer(new TextRenderer<>(...))
.
实现同样的效果
所以在这种情况下
myBox.setRenderer(new TextRenderer<>(MyEnum::getText));
我有一个 RadioButtonGroup<MyEnum>
并且我用枚举设置了项目。单个项目的标签现在是我的枚举的元素。由于代码约定,我的 Enum 元素写得很大。我向我的枚举添加了一个 public String getText(MyEnum e)
方法,我希望 RadioButtonGroup 的标签是这些文本。
我还有几个组合框,它们的元素也来自枚举。 ComboBoxes 有一个方法 setItemLabelGenerator()
,我可以用它来将我的枚举元素文本表示设置为标签。
我的枚举
public enum MyEnum{
OPT1, OPT2, OPT3;
public static String getText(MyEnum e) {
switch(e) {
case OPT1: return "Option 1";
case OPT2: return "Option 2";
case OPT3: return "Option 3";
}
return "";
}
public static Collection<MyEnum > getValues(){
Collection<MyEnum > resultList = new ArrayList<MyEnum >();
resultList.add(OPT1);
resultList.add(OPT2);
resultList.add(OPT3);
}
}
在我的 UI class 中,我的 RadioButtonGroup 的 Enum 元素作为项目:
RadioButtonGroup<MyEnum> myRadioGroup= new RadioButtonGroup<MyEnum>();
myRadioGroup.setItems(MyEnum.getValues());
不幸的是,项目的标签是 "OPT1"、"OPT2" 和 "OPT3",但我希望它们是 "Option 1"、"Option 2" 和 "Option 3".
对于我的组合框,我可以使用 setItemLabelGenerator()
方法来获得漂亮的标签:
ComboBox<MyEnum> myBox= new ComboBox<MyEnum>();
myBox.setItems(MyEnum.getValues());
myBox.setItemLabelGenerator(MyEnum::getText);
我的 ComboBox 中的项目是 "Option 1"、"Option 2" 和 "Option 3"。
有人能告诉我,如何获得与 RadioButtonGroups 的 ComboBoxes 一样的结果吗?我希望我的用户在 UI 中看到漂亮的标签 :-)
默认行为是对 ComboBox
中的对象执行 toString
。那么,为什么不按照您的期望制作 toString
return,或者设置带有 getter 的标签 属性?
enum MyOptions {
OPT1("Option 1"),
OPT2("Option 2"),
OPT3("Option 3");
private final String label;
MyOptions(String label) {
this.label = label;
}
// either use getLabel as your item label generator...
public String getLabel() {
return this.label;
}
// ...or if you don't care about printing in logs etc.
// just override the default toString implementation
public String toString() {
return this.label;
}
}
RadioButtonGroup
没有 setItemLabelGenerator(...)
,但是你可以用 setRenderer(new TextRenderer<>(...))
.
所以在这种情况下
myBox.setRenderer(new TextRenderer<>(MyEnum::getText));