1

我正在试验 Java UIManager 和不同外观的使用。我很快发现,这不仅仅是在小程序开始时设置外观和感觉并奇迹般地看到 UI 变化的问题。我发现对于某些 LAF,我会发现奇怪的不可预测的行为和失败。例如,当我将 JLabel 的字体设置为大小为 8 且正面为粗体的 Arial 时,生成的文本将是单个破折号“-”,而不是使用 Windows 或经典 Windows LAF 指定的文本。在其他情况下,如 Mac LAF,JTrees 停止工作(我正在 Windows 平台上实现我的应用程序)。所以我想知道,在更改 Java LAF 时是否需要遵循一组步骤,以便我选择的任何 LAF,我可以确信 Swing 其余部分的可靠且可预测的行为?是否只有某些 LAF 的健壮,而其余的只是为了勇敢的心?

预先感谢您的回复。

4

2 回答 2

2

我不知道如何准确地回答你的问题。我所能做的就是展示我如何使用不同的 UI 运行我的应用程序,请参见下文。该示例显示了我如何从Substance 库安装 Look and Feels 之一。

        public static void main(String[] argv) throws InterruptedException, InvocationTargetException
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                @Override
                public void run()
                {
                    try
                    {
                        UIManager.setLookAndFeel(new SubstanceSaharaLookAndFeel());
                        //Some people say the below should also be called but even without it always worked for me so what is this for then?
                        //SwingUtilities.updateComponentTreeUI(frame);
                    }catch(Exception e)
                    {
                        Logger.getLogger(MyApplicationFrame.class.getName()).log(Level.SEVERE, null, e);
                        System.out.println("Substance look and feel failed to initialize");
                    }
                    new MyApplicationFrame();
                }
            });
        }

至于代码中关于调用的注释,SwingUtilities.updateComponentTreeUI(frame);我猜想在应用程序已经运行时更改外观时需要它。

希望对你有任何帮助。

于 2011-05-14T13:50:08.817 回答
1

例如,当我将 JLabel 的字体设置为大小为 8 且字体为粗体的 Arial 时,生成的文本将是单个破折号“-”而不是指定的文本。

可能是因为您的代码没有使用布局管理器,并且在代码中的某处使用了 setBounds(...) 或 setPreferredSize()。

所以我想知道,在更改 Java LAF 时是否需要遵循一组步骤,以便我选择的任何 LAF。

阅读 Swing 教程中关于修改外观的部分以获取解释和工作示例。

于 2011-05-14T15:05:32.100 回答