2014-10-03 183 views
0

我在我的動作中有一個MouseListener,動作對應於一個JButton。鼠標事件適用於右鍵單擊事件,但對於左鍵單擊事件似乎不會重置我的鼠標事件,因此每次左鍵單擊都會通過其之前的每個左鍵單擊進行播放。因此,第一次左鍵點擊會使我的數字增加1,第二次增加2,第三增加3,第四增加4等等。它每次只應增加1。我做了一些調試,看起來左鍵單擊功能是在每次左擊組件歷史記錄時調用的。Java MouseEvent左鍵單擊actionPerformed

有什麼想法?

private void setupActions() 
{ 
    oneAction = new AbstractAction("1") 
    { 
     @Override 
     public void actionPerformed(ActionEvent e) 
     { 

      ((JButton)e.getSource()).addMouseListener(new MouseAdapter() 
      { 
       @Override 
       public void mouseClicked(MouseEvent e) 
       { 
        if (SwingUtilities.isLeftMouseButton(e)) 
        { 
         Integer quantityField = (Integer) model.getValueAt(0, 3); 
         if (quantityField == null || quantityField == 0) 
         { 
          quickOrderTableModel.setValueAt(1, 0, 3); 
         } 
         else 
         { 
          Integer newValue = (quantityField + 1); 
          quickOrderTableModel.setValueAt(newValue, 0, 3); 
         } 

        } 
        if (SwingUtilities.isRightMouseButton(e)) 
        { 

         Integer quantityField = (Integer) model.getValueAt(0, 3); 
         if (quantityField == null || quantityField == 0) 
         { 
          quickOrderTableModel.setValueAt(0, 0, 3);  
         } 
         else 
         { 
          Integer newValue = (quantityField - 1); 
          quickOrderTableModel.setValueAt(newValue, 0, 3); 
         } 

        } 
       } 

      }); 
     } 

    }; 
+1

如果單擊按鈕,則會調用actionPerformed(ActionEvent e)方法。每次發生這種情況時,都會向該按鈕添加一個新的MouseListener。所以如果你第一次點擊按鈕,它有一個MouseListener。如果你第二次點擊該按鈕,它有兩個MouseListener。如果你第三次點擊該按鈕,它有三個MouseListener ... – 2014-10-03 13:18:32

回答

1

我做了一些調試,似乎左點擊功能是 要求對組件的歷史上每單擊左鍵。

問題是你添加按鈕被按下一個新MouseListener每次:

@Override 
public void actionPerformed(ActionEvent e) { 
    ((JButton)e.getSource()).addMouseListener(new MouseAdapter() {...}); 
} 

因此你必須對安裝在鈕釦每一個聽衆的電話。

在如果我們的目標是增加另一方面/減少基於按什麼鼠標按鍵有些計數變量,那麼你就需要一個ActionListener都沒有:只有添加鼠標監聽一次,就是這樣:

JButton button = new JButton("1"); 
button.addMouseListener(new MouseAdapter() {...}); 

但IMO最好的辦法是有兩個按鈕,執行兩個不同的操作,忘記鼠標監聽器。

+0

爲什麼這個工作對於右鍵點擊並且每次只增加一個,但是左鍵單擊每次都會添加一個新的鼠標監聽器。 – sjohnson 2014-10-03 14:26:13

+0

由於右擊(輔助按鈕)在左擊(主按鈕)時不觸發操作事件。因此,左鍵點擊一個新的鼠標監聽器連接到按鈕,而在右鍵單擊它不會發生。@ user4105771 – dic19 2014-10-03 14:35:46

+0

感謝您的幫助,工作得很好。 – sjohnson 2014-10-03 15:06:57

相關問題