JavaFX:显示应用程序模式阶段后SplitPane鼠标处理中断

时间:2013-05-11 05:12:30

标签: scrollbar javafx-2 splitpane

在显示应用模式SplitPane后,ScrollBarStage控件上的鼠标处理中断。应用程序窗口丢失并重新获得焦点后,问题就消失了。有没有人知道这个问题的解决方案或解决方法?

鼠标处理方式有何损坏?当您点击并开始拖动控件(SplitPaneScrollBar)时,控件会停止响应您的鼠标移动鼠标光标离开控件的那一刻。这要求用户使用鼠标不可能精确。您可以期望控件响应鼠标移动,无论您的鼠标光标位于何处,直到您释放鼠标按钮

以下代码展示了Ubuntu Linux和JRE 1.7.0_21上的问题。我在其他JRE上看到了这个问题,但我没有尝试过其他操作系统。

import javafx.application.Application;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.SplitPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.stage.Modality;

public class SplitPaneBug extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        Button button = new Button(
            "Move the SplitPane divider, then click here to show the modal"
            + " dialog.");
        button.setOnAction(
            new EventHandler() {
                public void handle(Event event) {
                    Stage dialog = new ModalDialog();
                    dialog.showAndWait();
                }
            });
        button.setMaxWidth(Double.MAX_VALUE);

        SplitPane splitPane = new SplitPane();
        splitPane.getItems().setAll(new BorderPane(), new BorderPane());

        VBox vbox = new VBox();
        vbox.getChildren().setAll(button, splitPane);
        vbox.setVgrow(splitPane, Priority.ALWAYS);

        primaryStage.setTitle("SplitPane Bug?");
        primaryStage.setScene(new Scene(vbox, 640, 480));
        primaryStage.show();
    }

    class ModalDialog extends Stage {

        public ModalDialog() {
            Button button = new Button(
                "Click here to dismiss this dialog, then move the SplitPane"
                + " divider again.");
            button.setOnAction(
                new EventHandler() {
                    public void handle(Event event) {
                        close();
                    }
                });

            BorderPane borderPane = new BorderPane();
            borderPane.setCenter(button);

            initModality(Modality.APPLICATION_MODAL);
            setTitle("Modal Dialog");
            setScene(new Scene(borderPane, 600, 100));
            sizeToScene();
        }

    }

}

1 个答案:

答案 0 :(得分:1)

您确定使用的是7u21吗?请设置为输出VersionInfo.getRuntimeVersion()。 我不会在我的ubuntu 12.10上使用从官方网站下载的jdk 7u21(b11)重现, 但是fx 8.0中存在已知错误 - https://javafx-jira.kenai.com/browse/RT-29576