Java:使用 HashMap 从 ArrayList 迭代 JMenuItem

标签 java swing hashmap jframe actionlistener

我有一个带有菜单栏的 JFrame,其中我想要一些动态菜单,如图所示,具体取决于带有 HashList 的 ArrayList 的大小。这里的问题是我得到了动态数量的 JMenuItems,所以我需要一种方法来获取与 HashLists 一样多的变量。在本例中,我将变量的名称设为静态,但显然这不适用于 ActionListener,因为所有 MenuItem 都将具有相同的 ActionListener。

我想知道如何解决这个问题,以及如何获得一个具有动态数量的菜单项的菜单,这些菜单项都有独特的 Action 监听器。

private ArrayList<HashMap> menuLijst;

.

    for (HashMap h : menuLijst) {
        String vraag = (String) h.get("vraag");
        JMenuItem qMenu = new JMenuItem(vraag);
        informatie.add(qMenu);
        qMenu.addActionListener(this);
    }

提前致谢。

最佳答案

根据您想要在 ActionListener 中执行的操作,您可以使用 this ,就像您现在所做的那样,然后在 actionPerformed 中您可以使用 ((JMenutItem)event.getSource())查看哪个菜单项被单击。或者,您可以注册与菜单一样多的 ActionListener,如下所示:

for (final HashMap h : menuLijst) {
    final String vraag = (String) h.get("vraag");
    final JMenuItem qMenu = new JMenuItem(vraag);
    informatie.add(qMenu);
    qMenu.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent event) {
               // here event.getSource() is the same as qMenu
               System.out.println("Menu "+qMenu+" with label "+vraag+" has been pressed");
               System.out.println("HashMap is "+h);
         }
    });
}

但对我来说(也看到你之前的问题),你似乎在滥用HashMap的用法而不是使用适当的新对象。我不知道你的 HashMap 中还有什么,假设你有 3 个键:“vraag”、“answer”、“grade”,你可以创建以下类:

public class MyClass {
     private String vraag;
     private String answer;
     private int grade;

     // And getters and setters here.
}

并且有一个 List<MyClass>而不是List<HashMap> .

关于Java:使用 HashMap 从 ArrayList 迭代 JMenuItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10580734/

相关文章:

java - Swing 抽绳集中

java - 在 Java 中将 2D arraylist 转换为 hashmap

java - 对具有重复值的 HashMap 进行排序

data-structures - 用于有效返回哈希表(映射、字典)的前 K 个条目的数据结构

java - 内部锁定、客户端锁定和外部锁定之间的区别?

Java:切断字符串结尾的更简单方法

java - 在java中设置JTable中行的高度

java - 了解 spring-security-oauth2 @EnableAuthorizationServer

java - 在 oracle blob 中持久保存 java 对象

java - 如何创建自定义 JPanel 扩展并从 NetBeans 面板中使用它?