2017-09-10 4 views
1

SettingsPane peut automatiquement sélectionner un éditeur pour les propriétés. Dans ses doecs il ditQuel est le mappage entre les types de propriétés et leurs éditeurs dans un panneau SettingsPane?

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.

J'ai 2 questions à cet égard:

  1. Quel composant est choisi pour chaque type de propriété? J'ai vu que les booléens ont la bascule droite-gauche, les nombres ont un champ de texte, ObjectProperty<Color> a un sélecteur de couleur (qui sur le bureau apparaît - je ne sais pas ce qui se passera sur le mobile?). Quels sont les autres mappings?

  2. Lorsque j'essaie d'avoir une propriété enum: ObjectProperty<EnumType> Je reçois une erreur pour aucun moteur de rendu. Je penserais qu'un combobox serait le choix par défaut pour choisir parmi un nombre connu de constantes d'énumération, n'est-ce pas? Je sais que je peux le faire avec l'éditeur moi-même, mais je voulais quand même poser une question à ce sujet, peut-être comme suggestion si je ne me suis pas trompé.

Modifier

Je suis à la recherche de nouveau l'exemple SettingPane pour l'éditeur personnalisé: http://docs.gluonhq.com/charm/javadoc/4.3.7/com/gluonhq/charm/glisten/control/SettingsPane.html et je remarque 2 problèmes:

  1. Dans le code exemple de case à cocher éditeur voir mes commentaires:

    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. Dans l'exemple d'utilisation:

    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 me donne une erreur de compilation:

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

et option est de type Option<BooleanProperty> et la distribution est à Option<Boolean>. Une erreur?

Répondre

1

Les rédacteurs en chef par défaut pour un SettingsPanecontrol sont:

  • chaîne: TextField.
  • Nombre (octet et octet, court et court, int et entier, long et long, flotteur et flotteur, double et double, BigInteger, BigDecimal): TextField avec appliqué.
  • Booléen: ToggleButton.
  • DateDate: DatePicker.
  • Couleur/peinture: ColorPicker.
  • Énumérations: ComboBox.

Vous pouvez remplacer cela en définissant votre propre fabrique avec SettingsPane::setOptionEditorFactory, mais vous devrez fournir tous les éditeurs requis.

Vous pouvez également remplacer un éditeur particulier, ou vous pouvez ajouter votre propre éditeur pour un type donné.

Ceci est un exemple d'une option 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); 

En ce qui concerne le JavaDoc, oui, ce sont des fautes de frappe qui ont besoin de fixation. J'ai classé et émis sur lui.

A propos de l'exécution de l'échantillon, cela fonctionne pour moi tel quel. Voir la photo ci-dessus, pour l'option 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)); 
+0

Après avoir testé j'ai trouvé que l'erreur pour l'ENUM dans ma deuxième question se produit lorsque la valeur de la propriété est nulle, alors ceci est imprimé 'erreur, aucune option de rendu pour:

+0

Pour chaque propriété, vous avez besoin d'un moyen de rendre sa valeur. Vous pouvez définir un convertisseur si vous en avez besoin. Comme pour le générique, l'utilisation de 'new DefaultOption <>' fonctionne correctement si vous utilisez l'éditeur par défaut, mais lorsque vous ajoutez l'éditeur personnalisé, les types 'BooleanProperty' et' Boolean' ne correspondent pas, et vous ne pouvez pas. Cela fonctionnerait si le type pour l'option était simplement 'Boolean' (avec' wifi.getValue() '), mais alors il ne serait pas observable. –

+0

Hey, pouvez-vous jeter un oeil à cette question https://stackoverflow.com/questions/46815240/dialog-causes-drag-done-events-to-not-propagate s'il vous plaît? – Mark