Java 以编程方式为所有组件设置默认ttf字体

Java 以编程方式为所有组件设置默认ttf字体,java,codenameone,Java,Codenameone,我试图以编程方式设置默认字体,但似乎没有效果。如何以编程方式更改默认字体 我试过这个: def=Font.createTrueTypeFont("Shojumaru", "Shojumaru-Regular.ttf").derive(fis.display_faktor(80), Font.STYLE_PLAIN); UIManager.getInstance().getComponentStyle("Label").setFont(def); Display.g

我试图以编程方式设置默认字体,但似乎没有效果。如何以编程方式更改默认字体

我试过这个:

        def=Font.createTrueTypeFont("Shojumaru", "Shojumaru-Regular.ttf").derive(fis.display_faktor(80), Font.STYLE_PLAIN);
    UIManager.getInstance().getComponentStyle("Label").setFont(def);
    Display.getInstance().getCurrent().refreshTheme();
我也尝试过这种方法,但没有效果:

Hashtable h = new Hashtable();
h.put("font", largeFont);
UIManager.getInstance().addThemeProps(h);
Display.getInstance().getCurrent().refreshTheme();

第二种语法通常可以工作,但它不会覆盖所有组件,因为如果特定组件在本机主题中定义了要拾取的字体

您还需要使用以下命令覆盖选定/按下/禁用的字体:

h.put("sel#font", largeFont);
h.put("press#font", largeFont);
h.put("dis#font", largeFont);
然后,您需要覆盖按钮等内容,例如:

h.put("Button.font", largeFont);
h.put("Button.sel#font", largeFont);
h.put("Button.press#font", largeFont);
h.put("Button.dis#font", largeFont);
更简单的选择是加载基础主题:

Map<String, Object> themeHash = (Map<String, Object>)theme.getTheme("Theme");
for(String k : themeHash.keySet()) {
   if(k.endsWith("font")) {
       themeHash.put(k, largeFont);
   }
}
UIManager.getInstance().setThemeProps(h);
Display.getInstance().getCurrent().refreshTheme();
Map themeshash=(Map)theme.getTheme(“theme”);
对于(字符串k:themeHash.keySet()){
如果(k.endsWith(“字体”)){
themeHash.put(k,大字体);
}
}
UIManager.getInstance().setThemeProps(h);
Display.getInstance().getCurrent().refreshTheme();

这看起来像Java,所以我添加了
Java
标记。如果它是错误的,请删除它。