Получить абсолютное (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);
}
}