SettingsPane中属性类型与其编辑器之间的映射是什么?

时间:2017-09-10 17:47:53

标签: java gluon-mobile

SettingsPane可以自动为属性选择编辑器。在它的doecs中它说

  

SettingsPane控件旨在让开发人员可以根据这些选项的类型,使用适当的内置编辑器向最终用户提供可修改的选项列表。

我在这方面有两个问题:

  1. 为每种属性类型选择哪个组件?我看到布尔有左右切换,数字有一个文本字段,ObjectProperty<Color>有一个颜色选择器(在桌面上弹出 - 我不知道移动设备会发生什么?)。其余的映射是什么?

  2. 当我尝试拥有枚举属性时:ObjectProperty<EnumType>我没有渲染器出错。我认为组合框是默认选择已知数量的枚举常数,不应该吗?我知道我可以在编辑工厂自己做到这一点,但无论如何我想询问这个问题,如果我没有犯错,也许可以作为建议。

  3. 修改

    我再次关注自定义编辑器的SettingPane示例:http://docs.gluonhq.com/charm/javadoc/4.3.7/com/gluonhq/charm/glisten/control/SettingsPane.html 我注意到了两个问题:

    1. 在复选框编辑器的示例代码中,请参阅我的评论:

      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 }
      
    2. 在用法示例中:

      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));
      
    3. lambda给了我一个编译错误:

      Type mismatch: cannot convert from CheckBoxEditor to OptionEditor<BooleanProperty>
      

      option的类型为Option<BooleanProperty>,而广告属于Option<Boolean>。一个错误?

1 个答案:

答案 0 :(得分:1)

SettingsPane control的默认编辑器是:

  • 字符串:TextField
  • Numbers(byte和Byte,short和Short,int和Integer,long和Long,float和Float,double和Double,BigInteger,BigDecimal):TextField已应用TextFormatter
  • 布尔:ToggleButton
  • LocalDate:DatePicker
  • 颜色/颜料: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));