【问题标题】:How do I add a tag to JMenuItem?如何向 JMenuItem 添加标签?
【发布时间】:2019-12-12 14:08:19
【问题描述】:

如何为我的菜单项设置标签,以便稍后在回调中使用它?

类似的东西。有人做过吗?

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 swing jmenu jmenuitem


    【解决方案1】:

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

        final JMenuItem item = new JMenuItem();
        item.setName("item1");
    
        item.addActionListener(new ActionListener() {
    
            public void actionPerformed(ActionEvent e) {
                String tag = item.getName();
            }
        });
    

    【讨论】:

    • 也试试这个String tag = ((MenuElement) e).getComponent().getName();我现在无法测试
    【解决方案2】:

    您可以创建 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);
    

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

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

    参数:

    key - 新的客户端属性键

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

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

    【讨论】:

    • 我没想到。我会尽力。你的回答清晰而令人满意。非常感谢
    猜你喜欢
    • 2013-08-09
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 2016-07-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多