我必须为柬埔寨(unicode)文本数据指定Jframe
和JOptionPane
元素标题栏。
默认字体(对话框)无法正确呈现文本,我想将默认字体覆盖为其他内容
请伸出手,我该如何覆盖呢?
我尝试了以下方法,但都没有奏效。 (LaF:Substance 7.2.1)
UIManager.put("OptionPane.font", new FontUIResource(Main.get_ui_font()));
UIManager.put("TitledBorder.font", Main.get_ui_font());
UIManager.put("Frame.font", Main.get_ui_font());
我上面用Font
和FontUIResource
进行了测试,没有区别!
下面的代码抛出了一个内部物质api异常,它是关于nullpointerexception
,但是有了完整的堆栈,我看不到我的代码的任何堆栈跟踪,所以很奇怪,也许是一个错误。
SubstanceLookAndFeel.setFontPolicy(new FontPolicy() {public FontSet getFontSet(String arg0, UIDefaults arg1) {
FontSet fs=new FontSet() {
public FontUIResource getWindowTitleFont() {return new FontUIResource(Main.get_ui_font());}
public FontUIResource getTitleFont() {return new FontUIResource(Main.get_ui_font());}
public FontUIResource getSmallFont() {return new FontUIResource(Main.get_ui_font().deriveFont(10.0F));}
public FontUIResource getMessageFont() {return new FontUIResource(Main.get_ui_font());}
public FontUIResource getMenuFont() {return new FontUIResource(Main.get_ui_font());}
public FontUIResource getControlFont() {return new FontUIResource(Main.get_ui_font());}
};
return fs;
}
});
以上代码的完整堆栈跟踪
Exception in thread "main" java.lang.NullPointerException
at org.pushingpixels.substance.api.SubstanceLookAndFeel.setSkin(SubstanceLookAn
dFeel.java:2150)
at org.pushingpixels.substance.api.SubstanceLookAndFeel.access$000(SubstanceLoo
kAndFeel.java:92)
at org.pushingpixels.substance.api.SubstanceLookAndFeel$3.run(SubstanceLookAndF
eel.java:2136)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:301)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.ja
va:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java
:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:11
6)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java
:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
答案 0 :(得分:1)
您可以发布 Main.get_ui_font()方法的代码吗?
绘制JFrames
和JDialogs
窗口边框的任务委托给外部窗口系统,因此我不确定您是否可以轻松更改它们。
此外:
JFrames
中的标题无关,请查看文档。OptionPane
无论如何,要更改带有UIManager.put()
的字体,您应该将密钥和FontUIResource作为参数。
所以,我不确定你的Main.get_ui_font()返回什么,但是考虑到FontUIResource
- FontUIResource(Font font)
和FontUIResource(String name, int style, int size)
的构造函数 - 如果返回Font
而不是使用1;否则,如果您的方法返回FontUIResource
,请使用2。
另请注意,如果您想使用“非标准”字体,则应在使用前注册。对于此用途GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(..)