2014-07-07 4 views
7

Ho notato il metodo setUserData che appare su quasi tutti gli oggetti JavaFX e mi chiedevo se ci sono usi specifici per questo che sono considerati migliori pratiche di codifica di altri. (. O se ci sono almeno usi che sarebbero considerati impropri)Corretti utilizzi di JavaFX setUserData?

D'API Java la descrizione è:

Metodo pratico per impostare una singola proprietà oggetto che può essere recuperato in un secondo momento.

Questo metodo è davvero solo per attaccare comodamente qualsiasi cosa il tuo cuore desideri agli oggetti JavaFX? Potrei vedere la sua utilità nel tagging/marcatura degli oggetti, ma ha altri usi standard?

risposta

8

Userdata viene normalmente utilizzato quando i controlli possono essere alternati tra stati selezionati e non selezionati.

Tali controlli comprendono

  • RadioButtons
  • ToggleButton
  • RadioMenuItem

Per selezione singola, occorre assegnare questi oggetti per togglegroups. Poiché non è possibile accedere direttamente agli oggetti dei controlli dal gruppo di commutazione, assegniamo questi controlli con userdata, a cui è possibile accedere dallo Toggle utilizzando il metodo getUserData.

Consideriamo uno scenario in cui dobbiamo RadioButton per genere. Il requisito è quello di mostrare

Male 
Female 

ma, i dati che devono essere trasferiti dovrebbe essere

M 
F 

Sotto tale scenario, potrete usare qualcosa come

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, quindi è questo un campo di 'Node' semplicemente in modo che sia disponibile per sottoclassi (come i togglable) se necessario? – River