2017-05-15 4 views
-1

ich eine benutzerdefinierte Auswahlbox haben, die ich füllen dynamisch wie so hören:Wie Änderungen auf javafx Auswahlbox

public class CustomChoiceBox { 
    public void addItems(List<Item> items) { 
     // Populate choicebox 
     for(Item item : items) { 
      CustomOption choice = new CustomOption(String.valueOf(item.getId()), item); 
      this.getItems().add(choice); 
     } 
    } 
} 

CustomOption ist eine benutzerdefinierte Klasse wie folgt definiert:

public class CustomOption extends Observable{ 
    private String key; 
    private Object value; 

    public CustomOption(String key, Object value) { 
     this.key = key; 
     this.value = value; 
    } 
} 

Ich möchte in der Lage zu hören, wenn der Benutzer eine andere Wahl trifft und den Wert dieser Wahl erhält. So habe ich einen Listener hinzugefügt:

myChoiceBox.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<CustomOption>() { 
@Override 
public void changed(ObservableValue<? extends CustomOption> observable, 
    CustomOption oldValue, CustomOption newValue) { 

     System.out.println(newVaue.getValue()); 
    } 
}); 

jedoch dieser Code ausgeführt wird, nicht, wenn ich die Auswahl ändern. Ich habe auch versucht myChoiceBox.valueProperty()

+1

Ist es 'CustomOption' oder' ChoiceBoxOption'? Und vermutlich soll es "öffentliche Klasse" sein. CustomChoiceBox erweitert ChoiceBox '(oder' ChoiceBox ', je nachdem, was Sie tatsächlich verwenden). Wenn diese behoben sind, gibt es offensichtlich keinen Fehler mit dem von Ihnen geposteten Code. Daher liegt das Problem wahrscheinlich an anderer Stelle. Sie sollten ein [MCVE] erstellen und Ihre Frage bearbeiten, um sie aufzunehmen. –

Antwort

-1

mit versuchen Sie könnten die INDEXPROPERTY statt ausgewählt unter Verwendung

final ChoiceBox<String> names = new ChoiceBox<String>(); 

names.getItems().add("john"); 
names.getItems().add("alex"); 
names.getItems().add("smith"); 

names.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() { 
    @Override 
    public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) { 
    System.out.println(names.getItems().get((Integer) number2)); 
    } 
}); 
Verwandte Themen