2013-11-14 92 views
0

我想知道如何更改上下文菜單中出現的文本的字體,這源於右鍵單擊JFrames標題欄左側的圖標使用默認外觀和裝飾(JFrame.setDefaultLookAndFeelDecorated(true);)。Swing·更改JFrame的標題欄圖標的上下文菜單的字體

我四處搜索,什麼也沒找到。我認爲我可以使用我所瞭解的關於更改標題欄標題字體的知識,但這並不奏效。

在此先感謝。

+1

*「提前致謝。」*錯誤..不客氣。但是你有問題嗎? –

+0

@安德魯·湯普森我認爲長篇第一段應該是個問題。 – async

+1

框架邊框和圖標通常由操作系統提供,它佔用了我們控制的一面。你使用什麼外觀和感覺?靈氣或金屬? – MadProgrammer

回答

0

經過一些更多的混亂,我終於做到了!我非常喜歡Java,這讓我有點難過,要做這樣的事情有多難。無論如何,我發現了一種方法here以遞歸方式從JFileChooser中更改所有組件的字體,但它不適用於從標題欄圖標彈出的JPopupMenu(現在我知道該名稱)。所以我搞砸圍繞與方法,使用了一些鑄造,並能夠改變JMenuItems'字體:

public static void setSubComponentFont (Component comp[], Font font) { 
    for (int x = 0; x < comp.length; x++) { 
     if (comp[x] instanceof Container) { 
      setSubComponentFont(((Container)comp[x]).getComponents(), font); 
     } 
     try { 
      //comp[x].setFont(font); 
      if (comp[x].toString().contains("JMenu")) { 
       for (Component y : ((JMenu)comp[x]).getPopupMenu().getComponents()) { 
        if (y.toString().contains("JMenu")) { 
         y.setFont(font); 
        } 
       } 
      } 
     } catch (Exception ex) {} 
    } 
} 

我的靈感來自於this線程使用.toString().contains()

我還與嵌套循環做了這一點,所以路徑菜單項可以看出:

for (Component a : frame.getLayeredPane().getComponents()) { 
    System.out.println(a.toString()); 
    if (a.toString().contains("MetalTitlePane")) { 
     for (Component b : ((Container)a).getComponents()) { 
      System.out.println(b.toString()); 
      if (b.toString().contains("SystemMenuBar")) { 
       for (Component c : ((Container)b).getComponents()) { 
        System.out.println(c.toString()); 
        for (Component d : ((JMenu)c).getPopupMenu().getComponents()) { 
         System.out.println(d.toString()); 
         if (d.toString().contains("JMenu")) { 
          d.setFont(font); 
         } 
        } 
       } 
      } 
     } 
    } 
} 

System.out.println()給出了一個暗示,應該在以下if的條件是什麼,因此他們應該被使用一次一個。但這對JFileChooser的標題字體不起作用。當我有時間的時候,我會仔細研究它或者提出另一個問題。

所以,如果有人需要它像我一樣,在這裏。作爲提示,System.out.println().toString()是你的朋友!這就是我學習每個對象所包含的內容的方式,以及我需要採取什麼樣的途徑才能找到感興趣的對象。

無論如何,謝謝!

相關問題