Essayer de mettre en forme SwingNodes dans JavaFX avec GTKLookAndFeel gèle l’application

Nous avons une application Java qui utilise Swing, mais nous la migrons vers JavaFX. Par conséquent, nous encapsulons l’ancien code Swing dans SwingNode s et les SwingNode pas à pas.

Avant la migration, l’application Swing utilisait com.sun.java.swing.plaf.gtk.GTKLookAndFeel comme apparence (par défaut sur Ubuntu). Nous avons utilisé le code suivant pour le définir (si disponible):

 for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if (info.getClassName().equals("com.sun.java.swing.plaf.gtk.GTKLookAndFeel")) { UIManager.setLookAndFeel(info.getClassName()); } } 

Cela a bien fonctionné. Cependant, après le passage à JavaFX, l’appel à UIManager.setLookAndFeel() gèle l’application et rien ne se passe. Le réglage manuel du look-and-feel est nécessaire, car nous voulons toujours définir les composants Swing qui n’ont pas été migrés vers JavaFX en fonction de GTKLookAndFeel .

Plus d’informations: Cela ne fonctionne pas uniquement avec com.sun.java.swing.plaf.gtk.GTKLookAndFeel , car il fonctionne avec javax.swing.plaf.metal.MetalLookAndFeel , javax.swing.plaf.nimbus.NimbusLookAndFeel ou com.sun.java.swing.plaf.motif.MotifLookAndFeel .

Que pouvons-nous faire pour que cela fonctionne avec GTKLookAndFeel pour GTKLookAndFeel en forme nos composants Swing dans le SwingNode ?

Les composants Gui doivent être mis à jour dans des threads d’interface graphique.

Essayez l’une des actions suivantes:

 SwingUtilities.invokeLater(() -> { //commands }); javafx.application.Platform.runLater(() -> { //commands });