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, но безуспешно. Есть идеи?