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

问题描述

将外观设置为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.JdbcOdbc...