0

HashListsを含むArrayListのサイズに応じて、いくつかの動的メニューが必要なメニューバーを持つJFrameがあります。ここでの問題は、動的な量の JMenuItems を取得したことです。そのため、HashLists と同じ数の変数を取得する方法が必要です。この場合、変数の名前を静的にしましたが、すべての MenuItem が同じ ActionListener を持つため、明らかにそれは ActionListener では機能しません。

これを解決する方法と、すべてが一意のアクションリスナーを持つ動的な量のメニューアイテムを含むメニューを取得する方法を考えています。

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);
    }

前もって感謝します。

4

2 に答える 2

1

Depending on what you want to do in your ActionListener, you can either use this, as you do right now and in the actionPerformed you can then use ((JMenutItem)event.getSource()) to see which menu item has been clicked. Alternatively, you could register as many ActionListeners as there are menus, like this:

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);
         }
    });
}

But to me (and also seeing your previous questions), it seems that you are abusing the usage of HashMap instead of using appropriate new objects. I don't know what else is in your HashMap, let's say that you have 3 keys: "vraag", "answer", "grade", you could create the following class:

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

     // And getters and setters here.
}

And have a List<MyClass> instead of List<HashMap>.

于 2012-05-14T10:11:31.100 に答える
0

Strings に HashMap を使用する理由がわかりません。String の ArrayList を保存し、それらをループしてすべてをメニューに追加すると、今行っているのと同じように、それらすべてに actionListeners を追加できます。

ActionListener で、ArrayList をループ処理し、クリックされたボタンの名前と比較して、どのボタンがクリックされたかを確認します。

于 2012-05-14T09:46:01.990 に答える