Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改JOptionPane和JFrame标题栏字体_Java_Swing_Fonts_Joptionpane_Substance - Fatal编程技术网

Java 更改JOptionPane和JFrame标题栏字体

Java 更改JOptionPane和JFrame标题栏字体,java,swing,fonts,joptionpane,substance,Java,Swing,Fonts,Joptionpane,Substance,我必须将Jframe和JOptionPane元素的标题栏指定为柬埔寨(unicode)文本数据。 默认字体(对话框)无法正确呈现文本,我想将默认字体替换为其他字体。 请帮帮我,我怎样才能覆盖它? 我尝试了以下方法,但没有一种有效。(LaF:物质7.2.1) 我在上面测试了Font和FontUIResource,没有区别 下面的代码抛出了一个内部substance api异常,它是关于nullpointerexception,但是由于堆栈已满,我看不到代码的任何堆栈跟踪,太奇怪了,可能是一个bug

我必须将
Jframe
JOptionPane
元素的标题栏指定为柬埔寨(unicode)文本数据。
默认字体(对话框)无法正确呈现文本,我想将默认字体替换为其他字体。
请帮帮我,我怎样才能覆盖它?
我尝试了以下方法,但没有一种有效。(LaF:物质7.2.1)

我在上面测试了
Font
FontUIResource
,没有区别
下面的代码抛出了一个内部substance api异常,它是关于
nullpointerexception
,但是由于堆栈已满,我看不到代码的任何堆栈跟踪,太奇怪了,可能是一个bug

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)

你能发布Main.get\u ui\u font()方法的代码吗?

绘制
JFrames
JDialogs
窗口边界的任务委托给外部窗口系统,因此我不确定您是否可以轻松更改它们

此外:

  • 帧。font不是有效的键
  • TitledBorder.font
    JFrames
    中的标题无关,请查看文档
  • 选项窗格。font更改
    选项窗格中消息的字体
无论如何,要使用
UIManager.put()
更改字体,应该将键和fontui资源作为参数。 因此,我不确定Main.get_ui_font()返回的是什么,但考虑到
FontUIResource
--
FontUIResource(font-font)
FontUIResource(字符串名称、int样式、int大小)
--如果返回
font
,则使用1;否则,如果您的方法返回
FontUIResource
,请使用2

  • UIManager.put(“key”,新的FontUIResource(Main.get_ui_font())
  • UIManager.put(“key”,Main.get_ui_font())
    还要记住,如果你想使用“非标准”字体,你应该在使用之前注册它。对于这种使用
    GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(..)

    Bro,我注册了我想要使用的任何字体,我还使用
    font
    FontUIResource
    进行了测试,没有任何区别。我只是尝试了很多方法,我想说这太糟糕了,我们无法更改它。当您更改OptionPane.font的值时,您是否至少看到OptionPane消息的任何更改?如果是,则表示至少您正在以正确的方式更改字体。如果不使用
    Jframe.undecorated(true)
    并使用内部窗格创建一个假窗口装饰器,那么要更改窗口标题,您没有键,我看不到任何其他解决方法。这不是一个简单干净的解决方案,但我看不出有其他办法。是的,伙计,我也很失望。没有任何隐含的方式。但是它从操作系统默认加载字体,也许我可以找到一种方法来覆盖它,我不知道。谢谢你,伙计。
    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)