启用和禁用的菜单项不会改变颜色

如何解决启用和禁用的菜单项不会改变颜色

将外观设置为Nimbus,然后打印出所有可用的菜单选项,以更改已启用和已禁用菜单项的颜色。

Menu:MenuItemAccelerator[MouSEOver].textForeground
MenuBar:Menu[disabled].textForeground
MenuBar:Menu[Enabled].textForeground
MenuBar:Menu[Selected].textForeground
MenuItem:MenuItemAccelerator[disabled].textForeground
MenuItem:MenuItemAccelerator[MouSEOver].textForeground
MenuItem[disabled].textForeground
MenuItem[Enabled].textForeground
MenuItem[MouSEOver].textForeground
Menu[disabled].textForeground
Menu[Enabled+Selected].textForeground
Menu[Enabled].textForeground

执行以下代码时,它仅更改主菜单,而不更改菜单项。

enter image description here

此外,将鼠标移到禁用的菜单项上之后,它实际上似乎已启用。

enter image description here

import java.awt.*;

import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;

import java.awt.event.*;
import java.util.*;
import java.util.Map.Entry;
import java.util.List;
 
public class JMenuTest1 extends JFrame { 
    static JMenuBar mb; 
    static JMenu x; 
    static JMenuItem m1,m2,m3; 
    static JFrame f; 
  
    public static void main(String [] args) 
    { 
        
        System.out.println("Default L&F : " + UIManager.getSystemLookAndFeelClassName());
        try 
        {
            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) 
            {
                System.out.println(info.getName()) ;
                if ("Nimbus".equals(info.getName())) 
                {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        }
        catch (Exception e) 
        {
            // If Nimbus is not available,you can set the GUI to another look and feel.
        }       
        
        try {
            List<String> colorKeys = new ArrayList<String>();
            Set<Entry<Object,Object>> entries = UIManager.getLookAndFeelDefaults().entrySet();
            for (Entry entry : entries)
            {
              if (entry.getValue() instanceof Color && entry.getKey().toString().startsWith("Menu"))
              {
                colorKeys.add((String) entry.getKey());
              }
            }
            
            // sort the color keys
            Collections.sort(colorKeys);
            
            // print the color keys
            for (String colorKey : colorKeys)
            {
              System.out.println(colorKey);
            }           
        } catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
        UIManager.put("Menu[Enabled].textForeground",Color.GREEN);
        UIManager.put("MenuItem[Enabled].textForeground",Color.ORANGE);
        UIManager.put("Menu[disabled].textForeground",Color.RED);
        UIManager.put("MenuItem[disabled].textForeground",Color.RED);
        f = new JFrame("Menu demo"); 
        mb = new JMenuBar(); 
        x = new JMenu("Menu"); 
        m1 = new JMenuItem("MenuItem1"); 
        m2 = new JMenuItem("MenuItem2"); 
        m3 = new JMenuItem("MenuItem3");
        m2.enable(false);
        x.add(m1); 
        x.add(new JSeparator());
        x.add(m2);
        x.add(new JSeparator());
        x.add(m3); 
        mb.add(x); 
        f.setJMenuBar(mb); 
        f.setSize(500,500); 
        f.setVisible(true);
       
    } 
}

问题: 1-为什么菜单项的颜色不正确。 2-为什么在将鼠标移到MenuItem2上之后,为什么显示为启用状态?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?