我剛剛開始使用Swing學習GUI,但並不完全瞭解actionPerformed
方法的工作原理。請考慮以下代碼:如何在不明確調用「actionPerformed」方法的情況下調用該方法?
//code to create a button and change its text when clicked
public class simplegui implements ActionListener {
JButton button;
public static void main(String[] args) {
simplegui gui=new simplegui();
gui.go();
}
public void go() {
JFrame frame=new Frame();
button=new JButton("click Me");
button.addActionListener(this);
frame.getContentPane().add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,300);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent event) {
button.setText("I've been clicked!");
}
}
不應該在引發方法之前爲其創建對象(靜態方法除外)?
當按鈕被點擊時actionPerformed
方法被調用,但如何?通話在哪裏?我已經實現了接口ActionListener
,但知道何時發生操作的'ActionEvent'對象應該發送到'actionPerformed'方法的代碼在哪裏?它是否存在於Button類中? Button類中存在addActionListener
方法嗎?
當我點擊按鈕時,系統調用操作如何執行以及執行代碼的位置是gui.actionPerformed()
?
我遵循Java的OO概念,靜態等,直到現在,但這整個事件驅動編程是混亂。
但有**是**特定調用此方法,只它不會發生在您的代碼中,而是發生在JVM中。按鈕推動引發內部事件,導致JVM通知按鈕通知其所有聽衆已被推送。這將導致所有連接的ActionListener的actionPerformed方法被調用。 – 2014-08-31 12:49:39
@HovercraftFullOfEels我建議添加一個完整的答案(可能與指向Java/swing運行時庫源的鏈接) – hexafraction 2014-08-31 12:52:11
是的,我明白了,但是如果在其他地方有一個調用是在任何這些類中的代碼,如果是這樣,請將我的相關API文檔鏈接到清楚的地方? – 2014-08-31 12:53:35