JavaFX ComboBox неактивен, если SwingNode существует в сцене ⇐ JAVA
-
Гость
JavaFX ComboBox неактивен, если SwingNode существует в сцене
Я пытаюсь расширить существующий графический интерфейс JavaFX, включающий ComboBox, с помощью специального компонента Swing (в данном примере просто пустой JPanel) на отдельной панели. Проблема в том, что как только я устанавливаю компонент SwingNode на эту панель, ComboBox становится недоступным для щелчка.
Я разбил его на минимальный код ниже. Наше приложение является приложением Swing, но некоторые формы в основном используют JavaFX для своего контента, поэтому оно имеет эту странную структуру Swing-in-FX-in-Swing. Однако этого нельзя избежать, и обычно это не вызывает никаких проблем.
Отказ от внешнего окна Swing и создание сцены FX с этой сценой напрямую устраняет проблему, но с точки зрения архитектуры это не вариант для нашего приложения.
Я пробовал протестировать этот код, используя новейшие версии JDK 21 и OpenJFX 21, но там все еще не исправлено. Кто-нибудь сталкивался с подобной проблемой и предложил способ решения? Спасибо!
import java.awt.BorderLayout; импортировать javax.swing.*; импортировать javafx.application.Platform; импортировать javafx.collections.FXCollections; импортировать javafx.embed.swing.JFXPanel; импортировать javafx.embed.swing.SwingNode; импортировать javafx.scene.Scene; импортировать javafx.scene.control.ComboBox; импортировать javafx.scene.layout.VBox; публичный класс BugFrame расширяет JFrame { public static void main(String[] args) { BugFrame dlg = новый BugFrame(); dlg.setVisible(истина); } частный BugFrame() { супер(); JFXPanel jfxPanel = новый JFXPanel(); Platform.runLater(() -> jfxPanel.setScene(createScene())); добавить (jfxPanel, BorderLayout.CENTER); } частная статическая сцена createScene() { ComboBox комбо = новый ComboBox(FXCollections.observableArrayList( «Пункт 1», «Пункт 2» )); combo.setValue("Элемент 1"); SwingNode SwingNode = новый SwingNode(); SwingNode.setContent(новый JPanel()); // проблема исчезает при удалении этой строки вернуть новую сцену (новый VBox (комбо, SwingNode)); } }
Я пытаюсь расширить существующий графический интерфейс JavaFX, включающий ComboBox, с помощью специального компонента Swing (в данном примере просто пустой JPanel) на отдельной панели. Проблема в том, что как только я устанавливаю компонент SwingNode на эту панель, ComboBox становится недоступным для щелчка.
Я разбил его на минимальный код ниже. Наше приложение является приложением Swing, но некоторые формы в основном используют JavaFX для своего контента, поэтому оно имеет эту странную структуру Swing-in-FX-in-Swing. Однако этого нельзя избежать, и обычно это не вызывает никаких проблем.
Отказ от внешнего окна Swing и создание сцены FX с этой сценой напрямую устраняет проблему, но с точки зрения архитектуры это не вариант для нашего приложения.
Я пробовал протестировать этот код, используя новейшие версии JDK 21 и OpenJFX 21, но там все еще не исправлено. Кто-нибудь сталкивался с подобной проблемой и предложил способ решения? Спасибо!
import java.awt.BorderLayout; импортировать javax.swing.*; импортировать javafx.application.Platform; импортировать javafx.collections.FXCollections; импортировать javafx.embed.swing.JFXPanel; импортировать javafx.embed.swing.SwingNode; импортировать javafx.scene.Scene; импортировать javafx.scene.control.ComboBox; импортировать javafx.scene.layout.VBox; публичный класс BugFrame расширяет JFrame { public static void main(String[] args) { BugFrame dlg = новый BugFrame(); dlg.setVisible(истина); } частный BugFrame() { супер(); JFXPanel jfxPanel = новый JFXPanel(); Platform.runLater(() -> jfxPanel.setScene(createScene())); добавить (jfxPanel, BorderLayout.CENTER); } частная статическая сцена createScene() { ComboBox комбо = новый ComboBox(FXCollections.observableArrayList( «Пункт 1», «Пункт 2» )); combo.setValue("Элемент 1"); SwingNode SwingNode = новый SwingNode(); SwingNode.setContent(новый JPanel()); // проблема исчезает при удалении этой строки вернуть новую сцену (новый VBox (комбо, SwingNode)); } }
Мобильная версия