SwingNode внутри JFXPanel вызывает повторяющееся UngrabEvent

Я должен встроить компонент Swing в JavaFX Scene (с помощью SwingNode), который содержится внутри компонента Swing (используя JFXPanel) снова.

Это вызывает повторение UngrabEvents от SwingNode к его внутреннему JLightweightFrame после того, как мышь нажата где-то в пользовательском интерфейсе. Это событие происходит только при встраивании Swing в JavaFX внутри Swing (а не при встраивании Swing в JavaFX или JavaFX только в Swing).

Следующий код может быть использован для воспроизведения проблемы. Просто установите точку останова в конструкторе UngrabEventНапример, и щелкните где-нибудь, чтобы увидеть, что происходит.

public class Main {
    public static void main(String[] args) {
        JFXPanel panel = new JFXPanel();
        VBox view = new VBox();

        view.getChildren().add(new Label("A JavaFX Label"));
        view.getChildren().add(new Button("A JavaFX Button"));
        SwingNode swingNode = new SwingNode();
        swingNode.setContent(new JButton("A Swing Button"));
        view.getChildren().add(swingNode);
        view.getChildren().add(new Label("Another JavaFX Label"));

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(600, 400));

        frame.getContentPane().add(panel);
        frame.pack();
        frame.setVisible(true);

        Platform.runLater(() -> panel.setScene(new Scene(view, null)));
    }
}

Я использую JDK 8.0.152, Windows 10 64bit.

обновление: также протестировано с Java 9.0.1 в Windows, та же проблема.

Это похоже на ошибку в JDK. Я пытался подавить событие, добавив EventFilters к SwingNode, но безуспешно. Есть идеи?

0 ответов

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