2014-09-24 3 views
0

Здесь я использую rating feature of ControlsFX. Каждый раз, когда значение рейтинга изменилось, мне нужно обновить значение в TextField, как показано на снимке экрана. Можно ли использовать javafx.concurrent.Task здесь? и как я могу его применить? enter image description hereset Значение оценки для текстового поля

вот мой код:

@FXML 
private HBox ratinghbox; 
@FXML 
private TextField yourratingtxt; 
private Rating rating; 

@Override 
public void initialize(URL url, ResourceBundle rb) { 
    rating = new Rating(); 
    rating.setPartialRating(true); 
    ratinghbox.getChildren().add(rating); 
    yourratingtxt.setText(String.valueOf(rating.getRating())); 
} 

ответ

1

Использование изменения слушателя

Используйте ratingProperty обновить TextField

rating.ratingProperty().addListener(new ChangeListener<Number>() { 
    @Override 
    public void changed(ObservableValue<? extends Number> observable, 
       Number oldValue, Number newValue) { 
     textField.setText(newValue.toString()); 
    } 
}); 

Использование Binding

Вы также можете создать bidirectional binding между текстовым полем и рейтинг (только если вы хороши с , не редактируя значение текстового поля)

textfield.setDisable(true) 
Bindings.bindBidirectional(textField.textProperty(), rating.ratingProperty(), 
      new NumberStringConverter()); 

Если необходимо отредактировать текстовое поле, не используйте этот

1

зарегистрировал обработчик события Click с Рейтинг объекта.

public final <T extends Event> void addEventHandler(EventType<T> eventType, 
               EventHandler<? super T> eventHandler) 

напишите один обработчик событий, который будет вызываться, когда вы нажмете на элемент управления рейтингом. , а затем измените значение в обработчике событий.