尝试使用GTKLookAndFeel冻结应用程序在JavaFX中设置样式的SwingNodes

Mar*_*ger 47 java gtk swing javafx look-and-feel

我们有一个使用Swing的Java应用程序,但我们正在将它迁移到JavaFX.因此,我们将旧的Swing代码包装成SwingNodes并逐步替换它们.

在迁移之前,Swing应用程序用作com.sun.java.swing.plaf.gtk.GTKLookAndFeel外观(Ubuntu上的默认设置).我们使用以下代码进行设置(如果可用):

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

这很好.然而,在切换到JavaFX后,调用UIManager.setLookAndFeel()冻结应用程序,没有任何反应.需要手动设置外观,因为我们仍然需要设置尚未根据文件迁移到JavaFX的Swing组件的样式GTKLookAndFeel.

进一步的信息:这只是不起作用com.sun.java.swing.plaf.gtk.GTKLookAndFeel,因为它在使用时起作用javax.swing.plaf.metal.MetalLookAndFeel,javax.swing.plaf.nimbus.NimbusLookAndFeelcom.sun.java.swing.plaf.motif.MotifLookAndFeel.

我们可以做些什么来使用它GTKLookAndFeel来设计我们的Swing组件SwingNode

jus*_*ode 1

Gui组件需要更新为gui线程。

尝试以下方法之一:

SwingUtilities.invokeLater(() -> {
//commands
});

javafx.application.Platform.runLater(() -> {
//commands
});
Run Code Online (Sandbox Code Playgroud)