2012-05-12 27 views
4

私は、関数がJListで選択された項目を渡し、ユーザーがJButtonをクリックしたときにJTextFieldの値を渡す関数を実装しています。JButtonでActionPerformedが複数回呼び出されましたか?

私はいくつかのリスナーを使用しています。しかし、ユーザーがボタンを2回押して不要な結果を生成すると、addcartbtn内のループactionPerformedが2回呼び出されたようです。ユーザーが3回目を押すと、関数は3回呼び出されたように見えます。

list.addListSelectionListener(new ListSelectionListener() { 

     Map<String, Integer> cartlist = new HashMap<String, Integer>(); 

     public void valueChanged(final ListSelectionEvent e) { 
      if (e.getValueIsAdjusting()) { 
       System.out.println("test0"); 
       final ArrayList<String> cartArrayList = new ArrayList<String>(); 
       addcartbtn.addActionListener(new ActionListener() { 

        public void actionPerformed(final ActionEvent e2) { 

         System.out.println("test2"); 
         String itemselected = ""; 
         System.out.println("Index is " + e.getLastIndex()); 
         String itemname = (String) hashmap.get(e.getLastIndex()); 
         itemselected = itemname; 

         //System.out.println(itemselected); 
         try { 
          int insertedquantity = Integer.parseInt(quantity.getText()); 
          cartlist.put(itemselected, insertedquantity); 
          //shoppingcart.revalidate(); 
          String element = itemselected + " " + String.valueOf(insertedquantity); 

          cartArrayList.add(element); 

          System.out.println(element); 
          //System.out.println(counter); 
          shoppingcart.setListData(cartArrayList.toArray()); 
          shoppingcart.revalidate(); 
          shoppingcart.repaint(); 
          System.out.println("---------"); 

         } catch (NumberFormatException ex) { 
          System.out.println("Not a number!"); 
         } 
        } 
       }); 
      } 
     } 
    }); 

ありがとうございました!

答えて

3

ListSelectionListener内にActionListenerを追加しないでください。意味がありません。あなたは無意味に多くのリスナーを追加します。実際、ボタンが押されたときにアクションが発生するようにしたいのであれば、ListSelectionListenerの理由はまったくありません。 JButtonにと追加されたActionListenerを、おそらくコンストラクタまたは設定メソッドで使用してください。

また、インデントが少し少なくなると、コードを読みやすくなります。
編集:元の投稿のコードインデントを減らしました。

+0

非常にありがとう、それは解決されています:) – user1311794

3

addcartbtnに新しいアクションリスナーを追加しています(JListで選択が行われるたびにaddCartButton、BTWという名前が付けられていれば、はるかに読みやすくなりません)。リスナーは一度だけ追加する必要があります。

関連する問題