ComboBox box = b;
b.addActionListener(this);
不應該期待this.actionPerformed(event)
被稱爲 操作組合框的時候?
我有一個測試框架與幾個組合框,它似乎正常運行 ,但沒有actionPerformed
被稱爲。也許框架 本身需要以某種方式武裝?
ComboBox box = b;
b.addActionListener(this);
不應該期待this.actionPerformed(event)
被稱爲 操作組合框的時候?
我有一個測試框架與幾個組合框,它似乎正常運行 ,但沒有actionPerformed
被稱爲。也許框架 本身需要以某種方式武裝?
這裏的正確答案。我使用com.codename1.ui.Dialog作爲頂層窗口 。我切換到使用com.codename1.ui.Form 和現在的行動正在按預期發射。
由Dialog構造的環境中的東西(它擴展了Form) 正在干擾事件機制。也許通過設計。
沒有這樣的事情。但是,對話框是一個單獨的窗體,並且被阻止,因此綁定事件的代碼可能已放置在顯示之後。 –
事件監聽器是肯定安裝的,但你的確是明顯的區別是Dialog.show()阻止,但Form.show()不會。有線程環境的寫作嗎?好奇的事情(對我來說)是下拉菜單操作。我希望事件發佈是由同一個線程完成的。 – ddyer
它的'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 –
你的問題不是很清楚,你沒有給它一個正確的標題。
如果你想的ActionListener添加到ComboBox
,你這是怎麼做到這一點:
ComboBox box = new ComboBox();
box.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
}
});
這基本上就是我所做的,但操作執行的方法從未被調用,因爲組合框被操縱。 – ddyer
根據我的理解,你只是想從一個類中創建一個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實例來處理多個事件。
這應該工作,我猜你可能有多個組合,可能是指錯誤的'actionPerformed'方法。您也可以通過在Codename One的'EventDispatcher'中放置一個監聽器來將調試過程關注到Codename One代碼本身中。http://www.codenameone.com/how-do-i-debug-into-codename-one-source-modify -it-contribution-it-back.html –
我使用舊的學校形式,這個類有一個actionperformed的方法。 – ddyer