1
Существует некоторый способ узнать положение большого пальца слайдера в JavaFX
?Координаты большого пальца слайдера в JavaFX
Существует некоторый способ узнать положение большого пальца слайдера в JavaFX
?Координаты большого пальца слайдера в JavaFX
Использование getBoundsInParent()
и lookup()
:
Bounds bounds = slider.lookup(".thumb").getBoundsInParent();
Вам может понадобиться applyCss()
с ползунком до поиска для того, чтобы работать.
import javafx.application.Application;
import javafx.geometry.Bounds;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class SlipSlide extends Application {
@Override
public void start(Stage stage) {
Slider slider = new Slider(1, 10, 3);
slider.setMajorTickUnit(9);
slider.setMinorTickCount(8);
slider.setSnapToTicks(true);
slider.setShowTickMarks(true);
slider.setShowTickLabels(true);
slider.setPrefWidth(250);
Label boundsLabel = new Label();
VBox layout = new VBox(10, slider, boundsLabel);
stage.setScene(new Scene(layout));
stage.show();
reportThumbBounds(slider, boundsLabel);
slider.valueProperty().addListener((observable, oldValue, newValue) -> {
reportThumbBounds(slider, boundsLabel);
});
slider.boundsInParentProperty().addListener((observable, oldValue, newValue) -> {
reportThumbBounds(slider, boundsLabel);
});
}
private void reportThumbBounds(Slider slider, Label boundsLabel) {
Bounds bounds = slider.lookup(".thumb").getBoundsInParent();
boundsLabel.setText(
String.format(
"(%.2f,%.2f) (%.2f,%.2f)",
bounds.getMinX(), bounds.getMinY(),
bounds.getMaxX(), bounds.getMaxY()
)
);
}
public static void main(String[] args) {
launch(args);
}
}
У меня есть немного нежелательный эффект: Когда я двигаю палец быстро иногда не разметить положение и если отсутствует обновление. Зачем? – Oundroni
JavaFX работает на основе [импульсной системы] (https://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-architecture.htm#A1106308), которая обычно ограничена 60 кадрами на во-вторых, поэтому обновления быстрее 60 кадров в секунду могут быть объединены или пропущены. Скорость обработки импульсов может замедляться, если приложение JavaFX или система сильно загружено или блокирование ввода-вывода выполняется в потоке приложений JavaFX. Из вашего описания невозможно, чтобы я определил первопричину вашего предполагаемого отсутствующего обновления, это то, что вам нужно будет отследить самостоятельно. – jewelsea