如何向JMenuItem添加标签?

问题描述 投票:1回答:3

如何为菜单项设置标签,以便以后在回调中使用它?这样的事情。有人曾经做过吗?

JMenuItem item = new JMenuItem(mnu.text);
item.setSomething(myTag) ???;

item.addActionListener(new java.awt.event.ActionListener() {
   public void actionPerformed(java.awt.event.ActionEvent evt) 
   {
      start_something(myTag);
   }
});

谢谢

java jmenu
3个回答
1
投票

您可以使用.setName()方法对其进行标记

    final JMenuItem item = new JMenuItem();
    item.setName("item1");

    item.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            String tag = item.getName();
        }
    });

0
投票

您可以扩展类并创建自定义JMenuItem Impl

添加一些标记字段,稍后从类方法中使用它。


0
投票

您可以创建Adir D提到的子类,但也可以向组件本身添加属性,并在其他地方读取这些属性。对于少量属性或子类不合适的地方,它可能会解决您的问题。

请参见https://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html

putClientProperty

public final void putClientProperty(Object key,Object value)

向此组件添加任意键/值“客户端属性”。

get / putClientProperty方法提供对每个实例的小型哈希表的访问。调用者可以使用get / putClientProperty注释由另一个模块创建的组件。例如,布局管理器可能以此方式存储每个子约束。例如:

 componentA.putClientProperty("to the left of", componentB);

如果value为null,则此方法将删除该属性。客户端属性的更改通过PropertyChange事件报告。属性的名称(出于PropertyChange事件的考虑)为key.toString()。

clientProperty字典不旨在支持对JComponent的大规模扩展,在设计新组件时,不应将其视为子类的替代方法。

参数:

键-新的客户端属性键

value-新的客户端属性值;如果为null,则此方法将删除属性

另请参见:getClientProperty(java.lang.Object),Container.addPropertyChangeListener(java.beans.PropertyChangeListener)

© www.soinside.com 2019 - 2024. All rights reserved.