2015-12-22 88 views
1

如果我有- > actionPerformed?

ComboBox box = b; 
b.addActionListener(this); 

不應該期待this.actionPerformed(event)被稱爲 操作組合框的時候?

我有一個測試框架與幾個組合框,它似乎正常運行 ,但沒有actionPerformed被稱爲。也許框架 本身需要以某種方式武裝?

+0

這應該工作,我猜你可能有多個組合,可能是指錯誤的'actionPerformed'方法。您也可以通過在Codename One的'EventDispatcher'中放置一個監聽器來將調試過程關注到Codename One代碼本身中。http://www.codenameone.com/how-do-i-debug-into-codename-one-source-modify -it-contribution-it-back.html –

+0

我使用舊的學校形式,這個類有一個actionperformed的方法。 – ddyer

回答

0

這裏的正確答案。我使用com.codename1.ui.Dialog作爲頂層窗口 。我切換到使用com.codename1.ui.Form 和現在的行動正在按預期發射。

由Dialog構造的環境中的東西(它擴展了Form) 正在干擾事件機制。也許通過設計。

+0

沒有這樣的事情。但是,對話框是一個單獨的窗體,並且被阻止,因此綁定事件的代碼可能已放置在顯示之後。 –

+0

事件監聽器是肯定安裝的,但你的確是明顯的區別是Dialog.show()阻止,但Form.show()不會。有線程環境的寫作嗎?好奇的事情(對我來說)是下拉菜單操作。我希望事件發佈是由同一個線程完成的。 – ddyer

+0

它的'invokeAndBlock'就是對話框在Swing/AWT/Codename中的工作方式只有我們把它帶到下一個層次:http://www.codenameone.com/blog/callserially-the-edt-invokeandblock-part-1。 html http://www.codenameone.com/blog/callserially-the-edt-invokeandblock-part-2.html –

1

你的問題不是很清楚,你沒有給它一個正確的標題。

如果你想的ActionListener添加到ComboBox,你這是怎麼做到這一點:

ComboBox box = new ComboBox(); 
box.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent evt) { 
    } 
}); 
+0

這基本上就是我所做的,但操作執行的方法從未被調用,因爲組合框被操縱。 – ddyer

1

根據我的理解,你只是想從一個類中創建一個ComboBox來處理動作事件。爲此,我建議該類從ActionListener繼承並覆蓋(使用@Override標籤)actionPerformed。如果該類不是從ActionListener繼承的,則僅覆蓋該操作的執行是不夠的。

public class MyListener extends ActionListener { 
    @Override 
    public void actionPerformed (ActionEvent evt){ 
     //code you want to execute when the event happens 
    } 
    public void methodCreatingComboBox(){ 
     ComboBox b = new ComboBox(); 
     b.addActionListener(this); 
     //other stuffs 
    } 
} 

這將工作像一個魅力!你可以使用同一個MyListener實例來處理多個事件。