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

0 ответов

Другие вопросы по тегам