java - 如何将 ActionListener 添加到 AWT MenuItem?

标签 java awt menuitem

感谢您的关注! 请帮助新手:)

当前问题:

单击具有颜色名称的菜单项时需要更改线条的颜色。

这是我用于更改线条颜色的代码。 当我创建菜单项时,我还为它们创建了actionListener:

private void CreateMenu()
{
    menuBar = new MenuBar();
    menu = new Menu("File");
    mSave = new MenuItem("Save");
    colorSubMenu = new Menu("Choose Color...");

    String[] colors = {"red","yellow","green","blue","purple","black"};
    for(int i=0;i<colors.length;i++)
    {
        final int ii = i;
        MenuItem m=new MenuItem(colors[i]);
        colorSubMenu.add(m);
        colorSubMenu.addActionListener(
                                    new ActionListener()
                                            {
                                                @Override public void actionPerformed(ActionEvent e)
                                                {
                                       THIS LINE DOESN'T WORK ===>> color = Color.getColor(colorSubMenu.getItem(ii)));
                                                }
                                             }
                                        );
    }

    menu.add(mSave);        
    menu.add(colorSubMenu);
    menuBar.add(menu);        
    setMenuBar(menuBar);
}

但是...这不起作用! 请给个建议。我已经没有主意了。

很高兴听到任何消息:)再次感谢!

更新:

想要将这部分更改为更优雅且实际有效的内容:

colorSubMenu.addActionListener(
   new ActionListener()
   {
      @Override 
      public void actionPerformed(ActionEvent e)
      {
THIS LINE DOESN'T WORK ===>> color = Color.getColor(colorSubMenu.getItem(ii)));
      }
   }
);

最佳答案

Color#getColor依赖于使用系统属性中的颜色。这些可能与问题中颜色数组中的颜色不匹配。您可以使用反射来代替

@Override
public void actionPerformed(ActionEvent e) {
    Field field = Class.forName ("java.awt.Color").getField (e.getActionCommand());
    Color color = (Color) field.get (null);
    // use color...
}

关于java - 如何将 ActionListener 添加到 AWT MenuItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18937824/

相关文章:

ios - 切换到菜单栏中的 View Controller

java - 发生 IllegalArgumentException : id to load is required for loading?

java - 当我调整其内容大小时,JScrollPane 未调整大小

java - 六角网格上的元胞自动机

java - 读取图像时如何保持透明度不变? ( java )

Java如何绘制和填充有孔的多边形

Android MenuItem 自定义布局

java - 保留 JTabbedPane 的指定颜色

java - 无法使用书中的 java AWT 示例添加复选框组

android - 在更改选项卡上更改 ActionBar 项目的可见性