Java UIManager行为

Java UIManager行为,java,swing,uimanager,Java,Swing,Uimanager,我正在试验JavaUIManager和不同外观的使用。我很快发现,这不仅仅是在applet开始时设置外观和感觉,然后奇迹般地看到UI的变化。我发现,对于某些LAF,我会发现奇怪的不可预测的行为和失败。例如,当我将JLabel的字体设置为Arial,大小为8,字体为粗体时,生成的文本将是单破折号“-”,而不是使用Windows或Classic Windows LAF指定的文本。在其他情况下,如Mac LAF,JTrees停止工作(我在Windows平台上实现我的应用程序)。所以我想知道,在更改Ja

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


提前感谢您的回复。

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

至于代码中关于调用
SwingUtilities.updateComponentTreeUI(框架)的注释我猜在应用程序已经运行的情况下,当您正在更改外观和感觉时,它是必需的

希望对你有帮助

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

可能是因为您的代码没有使用布局管理器,并且在代码的某些地方使用了setBounds(…)或setPreferredSize()

所以我想知道,在更改JavaLAF时,是否需要遵循一组步骤,以便无论我选择什么LAF


阅读上Swing教程中的章节,以获取解释和工作示例。

“有些人说下面的部分也应该调用,但即使没有它,它也对我有用,那么这是为什么?”当您在可见GUI上动态更改LAF时,会使用该方法。如果您在创建任何组件之前更改LAF,则无需担心,因为组件是使用当前LAF创建的。非常感谢@camickr,我怀疑这就是它的用途。
        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();
                }
            });
        }