如何为菜单项设置标签,以便以后在回调中使用它?这样的事情。有人曾经做过吗?
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);
}
});
谢谢
您可以使用.setName()
方法对其进行标记
final JMenuItem item = new JMenuItem();
item.setName("item1");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String tag = item.getName();
}
});
您可以扩展类并创建自定义JMenuItem Impl
添加一些标记字段,稍后从类方法中使用它。
您可以创建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)