我一直在尝试学习和弄乱代码。我遇到了一些我没想到会发生的事情。我在 MainApp 类中有一个 JLabel,我创建了一个通过 JLabel 传递的 ActionListener (HelloListener)。按下按钮时,actionPerformed 方法应将 JLabel 更新为“Hello again!”。确实如此,但为什么会这样让我感到困惑。
但是,我认为我必须退回新的 JLabel?当我把HelloListener传给JLabel的时候,那JLabel不就是传完之后HelloListener类的属性吗?所以当它更新时,它只会更新 HelloListener 中的那个,然后我必须返回它?
为什么当我在 HelloListener 中更新 JLabel 时,它也会在 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!");
}
}