如何从文件中选择LookAndFeel

时间:2014-01-11 16:54:21

标签: java look-and-feel windowbuilder

我正在使用JTattoo来更改我的应用程序LookAndFeel。我知道如何设置任何可用的皮肤,但现在我希望用户能够选择其中任何一个。带有LAF的字符串保存在文件中,因此每次运行程序时,都应该读取此文件并根据您的选择设置皮肤。

我已经在GUI之前出现了一个JDialogBox,只是为了显示该文件是否已被正确读取,而且它是。

这是有效的:

UIManager.setLookAndFeel("com.jtattoo.plaf.aluminium.AluminiumLookAndFeel");

但这不是:

UIManager.setLookAndFeel(chooseSkin());

有什么想法吗?

PS:文件中的字符串是正确的,我已经检查了一百万次,我用引号试了一下,没有它们......我不知道现在该做什么

修改 注意,没有名为chooseSkin()的方法,它只是一个简单的引用,真正的方法叫做readFile()

Skins.java

public static String readFile() {
        String content = "";
           File file = new File("skins.txt");
           try {
               FileReader reader = new FileReader(file);
               char[] chars = new char[(int) file.length()];
               reader.read(chars);
               content = new String(chars);
               reader.close();
           } catch (IOException e) {
               e.printStackTrace();
           }
           System.out.println(content); // ---> returns: "com.jtattoo.plaf.aluminium.AluminiumLookAndFeel"
           return content;
    }

Main.java

public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    System.out.println(Skins.readFile() =="com.jtattoo.plaf.aluminium.AluminiumLookAndFeel"); // ---> returns false
                    UIManager.setLookAndFeel(Skins.readFile());                    
                    MainGUI frame = new MainGUI();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
}

2 个答案:

答案 0 :(得分:1)

嗯,文件中可能有额外的空格或新行或其他内容,有很多调试提示,比如打印字符串的长度。

String laf = "com.jtattoo.plaf.aluminium.AluminiumLookAndFeel";
System.out.println(Skins.readFile().length() + " , " + laf.length())

如果长度不一样,则需要确保正确写入文件。它最后可能包含换行符“\ n”。

有一种名为'equals'的方法,它将严格比较字符序列。例如:

Skins.readFile().equals("com.jtattoo.plaf.aluminium.AluminiumLookAndFeel") 

应该返回true。

UIManager也会抛出异常吗? (例如,java.lang.ClassNotFoundException)如果它无法加载LookAndFeel,它应该抛出异常。如果仍然无法让它工作,请尝试使用:

Skins.readFile().intern();

将根据'equals'方法返回等于它的字符串。 (字符序列相等的地方)

答案 1 :(得分:0)

Chooseskin必须返回一个字符串,该字符串等于存在的有效外观类的有效路径,例如“com.etc ... AluminiumLookAndFeel”。您需要检查读取文件的代码以及字符串是否为valud。用于此的调试器或println csn br。