JavaFX ComboBox неактивен, если SwingNode существует в сценеJAVA

Программисты 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)); } }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»