0

在这里,我正在使用ControlsFX 的评级功能。每次更改 rating value 时,我都需要更新 TextField 中的值,如屏幕截图所示。是否可以在这里使用javafx.concurrent.Task?我该如何应用它? 在此处输入图像描述

这是我的代码:

@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()));
}
4

2 回答 2

2

使用更改监听器

使用 ratingProperty 更新 Textfield

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

使用绑定

您还可以bidirectional binding在 textfield 和 rating 之间创建一个(仅当您擅长不编辑textfield 的值时)

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

如果您必须编辑文本字段,请不要使用它

于 2014-09-24T06:22:19.280 回答
1

使用 Rating 对象注册了 Click 事件处理程序。

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

编写一个事件处理程序,当您单击评级控件时将调用该事件处理程序。然后更改事件处理程序中的值。

于 2014-09-24T06:19:03.850 回答