簡體   English   中英

更改JOptionPane和JFrame標題欄字體

[英]Change JOptionPane and JFrame titlebar font

我必須為柬埔寨(unicode)文本數據指定JframeJOptionPane元素的標題欄。
默認字體(對話框)無法正確呈現文本,我想將默認字體替換為其他字體。
請伸出援助之手,我該如何處理?
我嘗試了以下方法,但沒有一個起作用。 (LaF:物質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());

我在上面用FontFontUIResource進行了測試,沒有區別!
以下代碼引發了一個內部實體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)

您可以張貼Main.get_ui_font()方法的代碼嗎?

任務繪制的邊界JFramesJDialogs窗戶被委托給外部的窗口系統,所以我不是很確定,你可以伊斯利改變它們。

此外:

  • Frame.font不是有效的密鑰。
  • TitledBorder.fontJFrames的標題無關,請參閱文檔。
  • OptionPane.font改變內部消息的字體OptionPane

無論如何,要使用UIManager.put()更改字體,您應該給鍵和FontUIResource作為參數。 因此,我不確定您的Main.get_ui_font()返回什么,但是請考慮FontUIResource的構造函數FontUIResource(Font font)FontUIResource(String name, int style, int size) –如果返回Font不是use 1; 否則,如果您的方法返回FontUIResource ,請使用2。

  1. UIManager.put(“ key”,new FontUIResource(Main.get_ui_font()));
  2. UIManager.put(“ key”,Main.get_ui_font());

還要記住,如果要使用“非標准”字體,則應在使用前注冊它。 為此,請使用GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(..)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM