我剛剛嘗試學習和搞亂代碼。我遇到了一些我不希望發生的事情。我在MainApp類中有一個JLabel,我創建了一個傳遞JLabel的ActionListener(HelloListener)。當按下按鈕時,actionPerformed方法應該將JLabel更新爲「再次Hello!」。它確實如此,但它爲什麼會讓我困惑。Java - ActionListener類的變量一致性..爲什麼這個工作?
不過,我想我會返回新JLabel的?當我傳遞HelloListener JLabel時,是不是JLabel在HelloListener類的屬性通過後?所以當它更新時它只會更新HelloListener中的一個,然後我將不得不返回它?
爲什麼當我更新了的JLabel的HelloListener它也是在MainApp類更新?
下面的代碼:
public class MainApp extends JFrame {
public static void main(String[] args) {
new MainApp();
}
public MainApp() {
setLayout(new GridLayout (2,1));
setSize(200,200);
JLabel jl = new JLabel("Hello!");
add(jl);
JButton jb = new JButton("Click me!");
jb.addActionListener(new HelloListener(jl));
add(jb);
setVisible(true);
}
}
和
public class HelloListener implements ActionListener {
JLabel jl;
public HelloListener(JLabel jl) {
this.jl = jl;
}
@Override
public void actionPerformed(ActionEvent arg0) {
jl.setText("Hello again!");
}
}
看看我的[對類似問題的回答](http://stackoverflow.com/a/10077580/544963)以獲取有關如何執行此操作的說明。如果您需要進一步的幫助,請詢問。 :) – fireshadow52 2012-04-10 12:34:29