Получить абсолютное (int) значение DoubleProperty в Javafx

Я с трудом пытаюсь напечатать значение abs DoubleProperty в тексте / метке, используя привязку... Это индикатор, и я хочу напечатать значение угла иглы в тексте / метке, но так как это двойной свойство, он печатает двойной. Вот образец:

needleValue = svg1Rotate.angleProperty();
value.textProperty().bind(needleValue.asString());

Самое смешное, что в Sys.Out он работает как шарм, когда я использую NumberFormat. Как это:

        System.out.println(NumberFormat.getIntegerInstance().format(needleValue.getValue()));

Любая помощь будет оценена. Заранее спасибо!!!

1 ответ

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

Пример:

import java.text.NumberFormat;
import java.text.ParseException;

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.util.StringConverter;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {

        HBox root = new HBox();

        DoubleProperty value = new SimpleDoubleProperty(12.345);

        TextField valueTextField = new TextField();

        Bindings.bindBidirectional(valueTextField.textProperty(), value, new IntegerStringConverter());

        root.getChildren().addAll(valueTextField);

        primaryStage.setScene(new Scene(root, 310, 200));
        primaryStage.show();

    }

    public class IntegerStringConverter extends StringConverter<Number> {

        NumberFormat formatter = NumberFormat.getIntegerInstance();

        @Override
        public String toString(Number value) {

            return formatter.format(value);

        }

        @Override
        public Number fromString(String text) {

            try {

                return formatter.parse(text);

            } catch (ParseException e) {
                throw new RuntimeException(e);
            }

        }

    }

    public static void main(String[] args) {
        launch(args);
    }
}
Другие вопросы по тегам