JavaFX: прерывание обработки мыши SplitPane после отображения модального этапа приложения
Работа с мышью на SplitPane
а также ScrollBar
контролирует перерывы после отображения модального приложения 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();
}
}
}
1 ответ
Вы уверены, что используете 7u21? Пожалуйста, установите для вывода VersionInfo.getRuntimeVersion(). Я не воспроизводю на своей Ubuntu 12.10 с jdk 7u21(b11), загруженного с официального сайта, но есть известная ошибка в FX 8.0 - https://javafx-jira.kenai.com/browse/RT-29576