【问题标题】:How to set JMenu Foreground color using UIManager如何使用 UIManager 设置 JMenu 前景色
【发布时间】:2014-09-19 06:43:30
【问题描述】:

我正在尝试在我的项目中设置 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;

}

感谢您的阅读

【问题讨论】:

  • 应该使用 Menu.background 但这似乎对我也不起作用。好问题
  • 我只做了jMenu1.setForeground(Color.RED); 它工作正常。文件菜单文本设置为红色。
  • 是的,但我想用 UIManager.put("Menu.foreground", Color.RED) 这个来设置 JMenu 的前景色。
  • 为了将来参考,每当发布 Swing MCVE 时,请确保您致电 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE),这样我们就不会产生一百万个后台程序(就像我现在所做的那样 :-),测试时

标签: java swing look-and-feel jmenu uimanager


【解决方案1】:

您可以替换单独的组件 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 都这样做

【讨论】:

  • @HArdik 我已经修改了我的示例
猜你喜欢
  • 2019-08-23
  • 2011-03-06
  • 2018-04-09
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多