2016-06-30 2 views

ответ

2

Использование getBoundsInParent() и lookup():

Bounds bounds = slider.lookup(".thumb").getBoundsInParent(); 

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

slipslide

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

У меня есть немного нежелательный эффект: Когда я двигаю палец быстро иногда не разметить положение и если отсутствует обновление. Зачем? – Oundroni

+0

JavaFX работает на основе [импульсной системы] (https://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-architecture.htm#A1106308), которая обычно ограничена 60 кадрами на во-вторых, поэтому обновления быстрее 60 кадров в секунду могут быть объединены или пропущены. Скорость обработки импульсов может замедляться, если приложение JavaFX или система сильно загружено или блокирование ввода-вывода выполняется в потоке приложений JavaFX. Из вашего описания невозможно, чтобы я определил первопричину вашего предполагаемого отсутствующего обновления, это то, что вам нужно будет отследить самостоятельно. – jewelsea

Смежные вопросы