2014-07-07 3 views
7

Ich bemerkte die setUserData-Methode, die auf fast allen JavaFX-Objekten angezeigt wird, und ich fragte mich, ob es bestimmte Verwendungen gibt, die als eine bessere Codierungspraxis angesehen werden als andere. (. Oder wenn es zumindest Verwendungen ist, die unsachgemäß angesehen würden)Richtige Verwendung von JavaFX setUserData?

Auf der Java-API ist die Beschreibung:

Convenience-Methode für eine einzelne Objekt-Eigenschaft, die zu einem späteren Zeitpunkt abgerufen werden können.

Ist diese Methode wirklich nur zum bequemen Anhängen von allem, was Ihr Herz begehrt, an JavaFX-Objekte? Ich könnte seine Nützlichkeit beim Markieren/Markieren von Objekten sehen, aber hat es andere Standardanwendungen?

Antwort

8

Userdata wird normalerweise verwendet, wenn die Steuerelemente zwischen ausgewählten und nicht ausgewählten Zuständen umgeschaltet werden können.

Solche Kontrollen umfassen

  • Radiobuttons
  • ToggleButton
  • RadioMenuItem

Für einzelne Auswahl, müssen wir diese Objekte togglegroups zuzuweisen. Da wir nicht direkt über die Umschaltgruppe auf die Objekte der Steuerelemente zugreifen können, weisen wir diese Steuerelemente mit userdata zu, auf die über die Methode Toggle mit der Methode getUserData zugegriffen werden kann.

Betrachten wir ein Szenario, wo wir RadioButtons für Geschlecht haben. Die Anforderung ist

Male 
Female 

zu zeigen, aber die Daten, die

übertragen werden soll
M 
F 

Unter solchen Szenarien sollten Sie so etwas wie

final ToggleGroup group = new ToggleGroup(); 

RadioButton male = new RadioButton("Male"); 
male.setToggleGroup(group); 
male.setUserData("M"); 

RadioButton female = new RadioButton("Female"); 
female.setToggleGroup(group); 
female.setUserData("F"); 

group.selectedToggleProperty().addListener(new ChangeListener<Toggle>() { 
    public void changed(ObservableValue<? extends Toggle> ov, 
     Toggle old_toggle, Toggle new_toggle) { 
    if (group.getSelectedToggle() != null) { 
     System.out.println(group.getSelectedToggle().getUserData().toString()); 
    } 
    } 
}); 
+0

Interessante verwenden können, so ist dies ein Feld von 'Node' einfach so, dass es Unterklassen (wie den Toggles) zur Verfügung steht, falls nötig? – River