2014-09-19 67 views
2

我想在我的項目中設置JMenu前景色。 我使用UIManager.put(「text」,Color.RED)它適用於所有文本,但在JMenu文本中顏色不變。如何使用UIManager設置JMenu前景色

我想設置JMenu.setForeground( 「Color.RED」)工作,但UIManager.put( 「Menu.foreground」,Color.RED)不填充顏色。 所以請幫助我下面的代碼。

import java.awt.Color; 
import javax.swing.UIManager; 


public class Frame extends javax.swing.JFrame { 

public Frame() { 
    setExtendedState(Frame.MAXIMIZED_BOTH); 
    setTitle("MENU COLOR"); 
    initComponents(); 
} 
private void initComponents() { 

    menu_bar = new javax.swing.JMenuBar(); 
    jMenu1 = new javax.swing.JMenu(); 

    jMenu1.setText("File"); 
    jMenu1.setFont(new java.awt.Font("URW Bookman L", 0, 18)); 
    jMenu1.setPreferredSize(new java.awt.Dimension(45, 25)); 
    jMenu1.setForeground(Color.RED); 
    menu_bar.add(jMenu1); 

    setJMenuBar(menu_bar); 

    pack(); 
} 

    public static void main(String args[]) { 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager 
        .getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        UIManager.put("Menu.foreground", Color.RED); 
        break; 
       } 
      } 
     } catch (Exception ex) { 
       ex.printStackStrace(); 
     } 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new Frame().setVisible(true); 
     } 
    }); 
} 
private javax.swing.JMenu jMenu1; 
private javax.swing.JMenuBar menu_bar; 

} 

感謝您閱讀

+0

應該使用Menu.background,但這似乎不適用於我。好問題 – 2014-09-19 07:49:37

+0

我只做了'jMenu1.setForeground(Color.RED);'它工作正常。文件菜單文字設置爲紅色。 – codebot 2014-09-19 08:29:33

+0

是的,但我想要使用** UIManager.put(「Menu.foreground」,Color.RED)** this爲JMenu設置的前景色。 – 2014-09-19 08:37:36

回答

3

可以更換單獨的組件UI。

例子:

public class MyMenuUI extends SynthMenuUI { 


    public static ComponentUI createUI(JComponent aComponent) { 
    return new MyMenuUI(); 
    } 

    @Override 
    public void installUI(JComponent c) { 
    super.installUI(c); 
    c.setForeground(UIManager.getColor("Menu.foreground")); 
    } 
} 

L的&˚F初始化後,必須簡單地把你的用戶界面爲L &˚F

try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager 
       .getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       UIManager.put("Menu.foreground", Color.RED); 
       UIManager.put("MenuUI", MyMenuUI.class.getName()); 
       break; 
      } 
     } 
    } catch (Exception ex) { 
      ex.printStackStrace(); 
    } 

缺點:必須爲每個做支載的L &˚F

+0

你可以把你的代碼放到我的問題代碼中嗎? – 2014-09-19 10:01:23

+0

@HArdik我修改了我的例子 – 2014-09-19 10:23:16

+0

謝謝老闆其作品... – 2014-09-19 10:52:01