que - Intentando crear SwingNodes en JavaFX con GTKLookAndFeel, congela la aplicación
javafx tutorial netbeans (1)
Tenemos una aplicación Java que usó Swing, pero la estamos migrando a JavaFX. Por lo tanto, SwingNode
el antiguo código Swing en SwingNode
y lo reemplazamos paso a paso.
Antes de migrar, la aplicación Swing usa com.sun.java.swing.plaf.gtk.GTKLookAndFeel
como apariencia y comportamiento (predeterminado en Ubuntu). Usamos el siguiente código para configurarlo (si está disponible):
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if (info.getClassName().equals("com.sun.java.swing.plaf.gtk.GTKLookAndFeel")) {
UIManager.setLookAndFeel(info.getClassName());
}
}
Esto funcionó bien. Sin embargo, después de cambiar a JavaFX, la llamada a UIManager.setLookAndFeel()
congela la aplicación y no ocurre nada. La configuración manual de la apariencia es necesaria ya que queremos seguir GTKLookAndFeel
estilo a los componentes de Swing que no se han migrado a JavaFX en función de GTKLookAndFeel
.
Más información: Esto solo no funciona con com.sun.java.swing.plaf.gtk.GTKLookAndFeel
, ya que funciona cuando se usan javax.swing.plaf.metal.MetalLookAndFeel
, javax.swing.plaf.nimbus.NimbusLookAndFeel
o com.sun.java.swing.plaf.motif.MotifLookAndFeel
.
¿Qué podemos hacer para que funcione con GTKLookAndFeel
para GTKLookAndFeel
nuestros componentes Swing en SwingNode
s?
Los componentes de Gui deben actualizarse en hilos de GUI.
Pruebe uno de los siguientes:
SwingUtilities.invokeLater(() -> {
//commands
});
javafx.application.Platform.runLater(() -> {
//commands
});