2012-01-31 73 views
2

我對一個奇怪的鼠標偵聽器行爲感到困惑。鼠標偵聽器不能與接口一起工作

首先,我定義的接口:

public interface GeniusField { 

    public void setEdited(Boolean b); 

    public void addMouseListeners(); 
    public void addKeyListeners(); 

    public String getStringValue(); 
} 

然後,我實現了這個接口:

public class GeniusComboField extends JComboBox implements GeniusField { 

    public GeniusComboField() { 

     super(); 

     //blabla 

     addMouseListeners(); 
     addKeyListeners(); 

    } 

    @Override 
    public void addMouseListeners() { 
     System.out.println("ADD LISTENTER"); 

     this.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       System.out.println("mouse mouse"); 
      } 
     }); 
    } 
} 

,由於某種原因,沒有被觸發,當我點擊我的組合框(但我得到「ADD LISTENER」輸出)。

我不明白髮生了什麼事。

有人可以幫忙嗎?

+0

你確定它是單擊combobok時會觸發的「mouseClicked」事件嗎? – VolatileDream 2012-01-31 16:27:03

+0

我試過MouseReleased,它不起作用。除此之外,我通過NetBeans中的設計界面嘗試了鼠標點擊,並且工作正常。 – user777466 2012-01-31 16:34:08

+1

[Java MouseListener for ComboBox]的可能的重複(http://stackoverflow.com/questions/6827784/java-mouselistener-for-combobox) – 2012-01-31 16:37:14

回答

2

在的Java Swing的JComboBox 沒有收到鼠標事件。這是它的組成部分。嘗試類似:

for (int i=0; i<this.getComponentCount(); i++) { 
    this.getComponent(i).addMouseListener(this); 
} 

然後讓您的類實現MouseListener。

或者您可以重寫將對象添加到組合框的方法,並調用您的addMouseListener()方法。就像每個對象都有一個監聽器一樣。

+0

這工作正常,謝謝。儘管如此,我還是不滿意,必須有更好的方法。 – user777466 2012-01-31 17:13:21

+1

+1是唯一正確的答案。 – Jivings 2012-01-31 17:16:17

0

有人必須實現MouseListener(可能是GeniusComboField)。 這樣的事情。

public class GeniusComboField extends JComboBox implements GeniusField, MouseListener 
+0

錯誤,您可以像他那樣添加監聽器,只是將偵聽器添加到錯誤的元素上。 – 2012-01-31 16:40:57

2

JComboBox是一個複合組件,它意味着它由兩個或更多的其他組件組成。 您不應在複合組件上註冊偵聽器,因爲它們不會正確捕獲這些事件。

您需要實施ActionListener才能使其正常工作。

public class GeniusComboField extends JComboBox implements ActionListener, GeniusField { 
    . . . 
} 

關於這方面更多的信息是在擺動trail of the Java tutorial.

+0

不是真的答案,你不再使用MouseEvent ... – 2012-01-31 16:46:37

+0

它直接從Swing文檔中獲取。那是過時了嗎? – Jivings 2012-01-31 16:48:38

+0

Swing文檔說明如何處理JComboBox上的事件,並且他們考慮使用ActionListener。但問的問題是關於在JComboBox上使用MouseListener而不是ActionListener。 – 2012-01-31 16:51:25

0

可我想這個代碼。它似乎工作得很好。問題可能出在你添加這個組合框的地方。鼠標監聽器將用於組合框本身,而不是其中的項目。