获取Javafx中DoubleProperty的绝对值(int)

时间:2015-07-19 21:55:01

标签: java javafx gauge

我很难尝试使用bind在文本/标签中打印DoubleProperty的abs值...它是一个标尺,我想在文本/标签中打印针角值,但是因为它是一个双重属性,它打印一个双。这是一个示例:

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

有趣的是,在Sys.Out中,当我使用NumberFormat时,它就像一个魅力。像这样:

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

任何帮助将不胜感激。 在此先感谢!!!

1 个答案:

答案 0 :(得分:0)

您可以创建转换器并在绑定中使用它。在转换器中,您可以创建任何您喜欢的表示,甚至在将值转换为字符串之前计算绝对值。

示例:

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);
    }
}