簡體   English   中英

如何使用UIManager設置JMenu前景顏色

[英]How to set JMenu Foreground color using UIManager

我正在嘗試在項目中設置JMenu前景色。 我使用UIManager.put(“ text”,Color.RED),它適用於所有文本,但在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;

}

謝謝您的閱讀

您可以替換單獨的組件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初始化后,您只需將UI放入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進行此操作

暫無
暫無

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

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