JavaFX ChoiceBox Name als Auswahl bei einer Objektliste

Frithjof

Mitglied
Hallo,

ich habe ein kleines Problem, ich möchte eine ChoiceBox mit Inhalten füllen.

Eine Methode liefert mir eine Liste mit Objekten die ich in der Joice anzeigen möchte.

Die Objekte haben die Variabele String name.

Ich kann keine tostring Funktion in der Objektklasse anlegen.
(Weil die Liste aus einem XML Webservice stammt)
Mein Code in der FXML sieht so aus:
Java:
@FXML
  private ChoiceBox<WorkType> joWorktype;

@Override
  public void initialize(URL url, ResourceBundle rb) {
  updateWindowFilds();
   
        ...
       // der Aufruf cm.getAllworkTypes() gibt eine List<WorkType> zurück. 
        joWorktype.setItems(FXCollections.observableArrayList(cm.getAllworkTypes()));
}
Wie kann ich die Liste ändern das einfach das Feld "name" angezeigt wird?

(In einer Späteren Methode lese ich die Liste aus und hole mir das ausgewählte Objekt aus der ChoiceBox.)
Vielen Dank!
 
Indem du ihn nicht an die ObservableList anfügst, sondern an die ChoiceBox - die API bezog sich explizit auf die ChoiceBox.
Du könntest so etwas wie das hier machen (ungetestet):
Java:
joWorktype.setConverter(new StringConverter<WorkType> () {
    WorkType fromString(String data) {
        // a string to a WorkType
    }
    String toString(WorkType item) {
        return item.[your-method-name].......
    }
});
 
Hallo,
vielen Dank, ich habe eine ganze weile Gerätselt aber dann habe ich verstanden wie deine Idee funktioniert. Ich habe es getestet und dabei die Sache in Zwei schritten gelösst und eine Hilfsklasse erzeugt.
Kurt:
Java:
public class CaseEditController implements Initializable {

//Die ChoiceBox und Ihr fx:id Feld.
   @FXML
    private ChoiceBox<WorkType> joWorktype;

public void initialize(URL url, ResourceBundle rb) {
    //Hier wird ein Converter erzeugt und dann die Liste übergeben.
    joWorktype.setConverter(new ConverterWorkType());
    joWorktype.getItems().addAll(cm.getAllworkTypes());

}



}
public class ConverterWorkType extends StringConverter<WorkType> {
   


Map<String, WorkType> mapWorkType = new HashMap<String, WorkType>();

@Override
public String toString(WorkType w) {
    mapWorkType.put(w.getName(), w);
    return w.getName();
}

@Override
public WorkType fromString(String s) {
    return mapWorkType.get(s);
}
   
}

Etwas ausführlicher und vlt. Anfängerfreundlicher habe ich es dann nochmal in mein Nozitbuch geschrieben.

Vielen dank für deine Hilfe!
 

Zurück
Oben