2016-07-14 13 views
1

Ich muss "scrollbar move" Listener zu einem TextArea hinzufügen.JavaFX TextArea Bildlaufleiste Bewegungsereignis

Aber wenn ich hinzugefügt

textArea.addEventFilter(ScrollEvent.ANY, (x) -> System.out.println(textArea.getScrollTop())); 

Es nur auf Ereignisse mithilfe von Mausrad ausgelöst hört - Mausrad blättern.

Wenn ich Bildlaufleiste mit der Maus auswählen und ziehen Sie es nach oben und unten, kein Ereignis wird abgefangen.

Ich habe verschiedene versucht Ansatz

textArea.addEventFilter(ActionEvent.ANY, (x) -> System.out.println(textArea.getScrollTop())); 
textArea.setOnScroll(...); 
textArea.setOnScrollStarted(...); 
textArea.setOnScrollFinished(...); 
textArea.textProperty().addListener((observable, oldValue, newValue) -> { 
    System.out.println("> " + textArea.getScrollTop()); 
}); 

nichts mit Scrollbar Scrollen reagiert.

Wie kann ich solch ein Ereignis fangen?

Antwort

2

können Sie die Eigenschaft scrollLeftProperty

Die Anzahl von Pixeln verwendet werden, durch die der Inhalt horizontal gescrollt wird.

und die Eigenschaft scrollTopProperty

Die Anzahl der Pixel, durch die der Inhalt vertikal gescrollt wird.

des TextArea gehört zu werden:

TextArea ta = new TextArea(); 
ta.scrollTopProperty().addListener((obs, oldVal, newVal) -> { 
    System.out.println("Position from top: " + newVal); 
}); 

ta.scrollLeftProperty().addListener((obs, oldVal, newVal) -> { 
    System.out.println("Position from left: " + newVal); 
}); 

Beispielausgabe:

Position from top: 36.0 
Position from left: 16.6046511627907 
+1

Thank you very much. Es funktioniert. – jmt