1

SplitPane和控件上的鼠标处理在ScrollBar显示 application-modal 后中断Stage。在应用程序窗口失去并重新获得焦点后,问题就消失了。有谁知道这个问题的解决方案或解决方法?

鼠标处理以什么方式损坏? 当您单击并开始拖动控件 (SplitPane或) 时,当您的鼠标光标离开控件一个像素ScrollBar时,控件就会停止响应您的鼠标移动。这要求用户使用鼠标非常精确。无论您的鼠标光标碰巧在哪里,您都希望控件能够响应鼠标移动,直到您松开鼠标按钮

以下代码展示了 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();
        }

    }

}
4

1 回答 1

1

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

于 2013-05-16T14:08:36.660 回答