属性 类型与其在 SettingsPane 中的编辑器之间的映射是什么?
What is the mapping between the property types and their editors in a SettingsPane?
SettingsPane
可以自动 select 一个属性编辑器。在它的文档中说
The SettingsPane control is designed to make it really easy for developers to present to end users a list of options that can be modified, using proper built-in editors according the type of those options.
关于这方面我有2个问题:
每个 属性 类型选择了哪个组件?我看到布尔值有左右切换,数字有一个文本字段,ObjectProperty<Color>
有一个颜色选择器(在桌面上弹出 - 我不知道在移动设备上会发生什么?)。其余的映射是什么?
当我尝试使用枚举时 属性: ObjectProperty<EnumType>
我收到没有渲染器的错误。我认为组合框将是从已知数量的枚举常量中进行选择的默认设置,不是吗?我知道我可以自己用编辑器工厂做到这一点,但我还是想问问这个问题,如果我没有犯错的话,也许可以作为一个建议。
编辑
我再次查看自定义编辑器的 SettingPane 示例:http://docs.gluonhq.com/charm/javadoc/4.3.7/com/gluonhq/charm/glisten/control/SettingsPane.html
我注意到 2 个问题:
在复选框编辑器的示例代码中看到我的评论:
public class CheckBoxEditor implements OptionEditor<Boolean> {
private final CheckBox checkBox;
public CheckBoxEditor(Option<Boolean> option) {
this.checkBox = new CheckBox();
valueProperty().bindBidirectional(option.valueProperty());
}} // only 1 }
@Override public Node getEditor() { return checkBox; }
@Override public final Property<Boolean> valueProperty() { return checkBox.selectedProperty(); }
@Override public Boolean getValue() { return checkBox.isSelected(); }
@Override public void setValue(Boolean value) { checkBox.setSelected(value); }
// missing }
用法示例中:
final Option<BooleanProperty> dateOption = new DefaultOption(MaterialDesignIcon.DATE_RANGE.graphic(),
"Show Date", "Show the date", "Category", settings.showDateProperty(), true,
option -> new CheckBoxEditor((Option<Boolean>) option));
lambda 给我一个编译错误:
Type mismatch: cannot convert from CheckBoxEditor to OptionEditor<BooleanProperty>
和 option
是类型 Option<BooleanProperty>
并且转换为 Option<Boolean>
。出错了?
SettingsPane
control 的默认编辑器是:
- 字符串:
TextField
.
- 数字(byte 和 Byte、short 和 Short、int 和 Integer、long 和 Long、float 和 Float、double 和 Double、BigInteger、BigDecimal):
TextField
应用了 TextFormatter
。
- 布尔值:
ToggleButton
.
- 本地日期:
DatePicker
.
- Color/Paint:
ColorPicker
.
- 枚举:
ComboBox
.
您可以通过使用 SettingsPane::setOptionEditorFactory
设置您自己的工厂来覆盖它,但是您必须提供所有必需的编辑器。
您也可以覆盖特定的编辑器,或者您可以为给定类型添加自己的编辑器。
这是 Enum
选项的示例:
enum OS { WINDOWS, MAC, LINUX, OTHER }
ObjectProperty<OS> os = new SimpleObjectProperty<>(OS.MAC);
Option<OS> OSOption = new DefaultOption(MaterialDesignIcon.LAPTOP.graphic(), "Operative System",
"Set the preferred OS", "Operative System", os, true);
关于 JavaDoc,是的,这些是需要修复的拼写错误。我已经提交并发布了。
关于 运行 示例,它按原样对我有用。见上图,WiFi选项:
final BooleanProperty wifi = new SimpleBooleanProperty();
final Option<BooleanProperty> wifiOption = new DefaultOption(MaterialDesignIcon.WIFI.graphic(),
"WiFi", "Set Wifi or Wire", "Devices", wifi, true,
option -> new CheckBoxEditor((Option<Boolean>) option));
SettingsPane
可以自动 select 一个属性编辑器。在它的文档中说
The SettingsPane control is designed to make it really easy for developers to present to end users a list of options that can be modified, using proper built-in editors according the type of those options.
关于这方面我有2个问题:
每个 属性 类型选择了哪个组件?我看到布尔值有左右切换,数字有一个文本字段,
ObjectProperty<Color>
有一个颜色选择器(在桌面上弹出 - 我不知道在移动设备上会发生什么?)。其余的映射是什么?当我尝试使用枚举时 属性:
ObjectProperty<EnumType>
我收到没有渲染器的错误。我认为组合框将是从已知数量的枚举常量中进行选择的默认设置,不是吗?我知道我可以自己用编辑器工厂做到这一点,但我还是想问问这个问题,如果我没有犯错的话,也许可以作为一个建议。
编辑
我再次查看自定义编辑器的 SettingPane 示例:http://docs.gluonhq.com/charm/javadoc/4.3.7/com/gluonhq/charm/glisten/control/SettingsPane.html 我注意到 2 个问题:
在复选框编辑器的示例代码中看到我的评论:
public class CheckBoxEditor implements OptionEditor<Boolean> { private final CheckBox checkBox; public CheckBoxEditor(Option<Boolean> option) { this.checkBox = new CheckBox(); valueProperty().bindBidirectional(option.valueProperty()); }} // only 1 } @Override public Node getEditor() { return checkBox; } @Override public final Property<Boolean> valueProperty() { return checkBox.selectedProperty(); } @Override public Boolean getValue() { return checkBox.isSelected(); } @Override public void setValue(Boolean value) { checkBox.setSelected(value); } // missing }
用法示例中:
final Option<BooleanProperty> dateOption = new DefaultOption(MaterialDesignIcon.DATE_RANGE.graphic(), "Show Date", "Show the date", "Category", settings.showDateProperty(), true, option -> new CheckBoxEditor((Option<Boolean>) option));
lambda 给我一个编译错误:
Type mismatch: cannot convert from CheckBoxEditor to OptionEditor<BooleanProperty>
和 option
是类型 Option<BooleanProperty>
并且转换为 Option<Boolean>
。出错了?
SettingsPane
control 的默认编辑器是:
- 字符串:
TextField
. - 数字(byte 和 Byte、short 和 Short、int 和 Integer、long 和 Long、float 和 Float、double 和 Double、BigInteger、BigDecimal):
TextField
应用了TextFormatter
。 - 布尔值:
ToggleButton
. - 本地日期:
DatePicker
. - Color/Paint:
ColorPicker
. - 枚举:
ComboBox
.
您可以通过使用 SettingsPane::setOptionEditorFactory
设置您自己的工厂来覆盖它,但是您必须提供所有必需的编辑器。
您也可以覆盖特定的编辑器,或者您可以为给定类型添加自己的编辑器。
这是 Enum
选项的示例:
enum OS { WINDOWS, MAC, LINUX, OTHER }
ObjectProperty<OS> os = new SimpleObjectProperty<>(OS.MAC);
Option<OS> OSOption = new DefaultOption(MaterialDesignIcon.LAPTOP.graphic(), "Operative System",
"Set the preferred OS", "Operative System", os, true);
关于 JavaDoc,是的,这些是需要修复的拼写错误。我已经提交并发布了。
关于 运行 示例,它按原样对我有用。见上图,WiFi选项:
final BooleanProperty wifi = new SimpleBooleanProperty();
final Option<BooleanProperty> wifiOption = new DefaultOption(MaterialDesignIcon.WIFI.graphic(),
"WiFi", "Set Wifi or Wire", "Devices", wifi, true,
option -> new CheckBoxEditor((Option<Boolean>) option));