ChangeListener не вызывает javaFX ScrollBar
Я добавил переменную ChangeListener для JavaFX scrollbar valueProperty(). Этот слушатель не вызывает в Open Java FX 11. Тот же код работал в Oracle JDK 8, который включает в себя Java FX.
Примечание. Этот "ScrollBar" ищется в WebView.
Пожалуйста, проверьте код ниже и предложите решение.
package samplefxprogram;
import java.util.Set;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Orientation;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.control.ScrollBar;
import javafx.scene.web.WebView;
import javafx.scene.layout.Pane;
import javafx.scene.web.WebEngine;
public class SampleFXProgram extends Application {
@Override
public void start(Stage primaryStage) {
int alert_width = 939;
int alert_height = 582;
WebView view = new WebView();
view.setContextMenuEnabled(false);
view.getEngine().setJavaScriptEnabled(true);
WebEngine webEngine = view.getEngine();
webEngine.load("https://openjfx.io/");
view.setMaxSize(939 + 2, alert_height);
view.setMinSize(alert_width + 2, alert_height);
view.setPrefSize(alert_width + 2, alert_height);
ScrollBar viewsb = null;
Set<Node> viewNodes = view.lookupAll(".scroll-bar");
for (final Node node : viewNodes) {
if (node instanceof ScrollBar) {
viewsb = (ScrollBar) node;
if (viewsb.getOrientation() == Orientation.VERTICAL) {
break;
}
}
}
Pane root = new Pane();
root.getChildren().addAll(view);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.setTitle("ScrollBar Example");
viewsb.valueProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable,
Number oldValue, Number newValue) {
System.out.println("Webview Scrollbar Listener calling");
}
});
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}