2015-03-06 5 views
0

При использовании ChangeListener, добавленного в ChoiceBox, есть ли способ прямого доступа к элементам из наблюдаемогоArrayList, для обновления, например, переменной экземпляра типа String?Использование ChangeListener для JavaFX ChoiceBox, работающего со строкой

Здесь я внедрил здесь этот код, который позволяет мне работать нормально, с значениями index наблюдаемогоArrayList. Но, я довольно новичок в Java, поэтому мне просто интересно, не так ли это? Или, если есть лучший способ обновить переменную String Instance с помощью ChangeListener.

cb_1.setItems(FXCollections.observableArrayList("High", "Average ", "Low")); 
cb_1.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() { 

    @Override 
    public void changed(ObservableValue<? extends Number> observable, 
     Number oldVal, Number newVal) { 

     System.out.println(observable.getValue());    
    } 
}); 
+0

well Observablelist автоматически обновит любой узел, который подкрепляется им, без усилий разработчика, и да, это лучший способ сделать это с моим интеллектом, поэтому давайте за ним – Elltz

+0

благодарю вас за авторитет Elltz! ! – Felix

ответ

0

У меня была такая же проблема. Я решил, создав класс, который реализует ChangeListener, но с конечным полем ChoiceBox, который устанавливается в конструктор класса

private class MyChangeListener implements ChangeListener<Number>{ 
    final ChoiceBox<Number> cb; 

    MyChangeListener(ChoiceBox<Number> cb) { 
     this.cb = cb; 
    } 

    @Override 
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { 
     System.out.println("cb: "+cb.getId()); 
    } 

} 

Я использовал его позже в коде как

@FXML ChoiceBox boxValidPwd; 
[..] 
boxValidPwd.setItems(FXCollections.observableArrayList(1,2,3,4,5,6)); 
boxValidPwd.getSelectionModel().selectedIndexProperty().addListener(new MyChangeListener(boxValidPwd)); 

и вам следует видеть в на выходе используется идентификатор выбораBox.

Смежные вопросы