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