任何一個可以讓我明白這個邏輯的流程,當按下按鈕B1那麼一些動作發生(某些語句執行),但爲什麼我們已經給出了語法像下面,創建ActionEvent
對象ae
以及它是如何工作的? 如果我不使用內部類,那麼我是否有任何其他表示?ActionEvent如何工作以及如何創建其對象以執行按下按鈕時執行的任務?
JButton b1=new JButton();
b1.addActionListener((ActionEvent ae) -> {
//Statements;
});
任何一個可以讓我明白這個邏輯的流程,當按下按鈕B1那麼一些動作發生(某些語句執行),但爲什麼我們已經給出了語法像下面,創建ActionEvent
對象ae
以及它是如何工作的? 如果我不使用內部類,那麼我是否有任何其他表示?ActionEvent如何工作以及如何創建其對象以執行按下按鈕時執行的任務?
JButton b1=new JButton();
b1.addActionListener((ActionEvent ae) -> {
//Statements;
});
所有的ActionListeners實現功能:
public void actionPerformed(ActionEvent e) {
...//code that reacts to the action...
}
此代碼創建它實現的ActionListener,並覆蓋到任何你想要的actionPerformed功能的新的匿名類。具有這種功能的新對象添加到foo內部的ActionListeners的名單:
foo.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
...//code that reacts to the action...
}
});
一種速記是使用lambda表達式,爲的ActionListener只有一個功能覆蓋,因此編譯器知道哪一個你平均(更多信息請參見上lambda表達式文檔):
foo.addActionListener(
(e) -> {
...\code that reacts to the action...
}
);
發生操作時,foo將其工作的方式,通過了ActionListener對象已經上市,並調用的actionPerformed()上的每一個。每個對象的函數版本的代碼依次運行。
順便說一句這是很好的做法不是太做太多工作的actionPerformed(),因爲它是在Swing線程中執行,在這裏性能下降將意味着不響應的用戶界面。如果您需要針對某個操作運行耗時的操作,請考慮在此函數內啓動一個新線程,或者僅設置一個標記以由現有線程檢測到。
非常漂亮解釋關於Lambda表達式和匿名類閱讀,得到了你的觀點,感謝這樣的字眼。 。 。 :) – Deepak
您可以添加像這樣的動作事件。
JButton b1 = new JButton();
b1.addActionListener(this);
那麼你必須使這個類
public void actionPerfomed(ActionEvent ae){
if(ae.getSource()==b1){
//your commands here
}
}
注:確保implent ActionListener
。
你是什麼意思'我有這方面的任何其他表示?'? – user3437460
您需要在Web –