私はコードを学び、いじり回そうとしているところです。そして、私は私が起こるとは思っていなかった何かに出くわしました。MainAppクラスにJLabelがあり、JLabelが渡されるActionListener(HelloListener)を作成します。ボタンが押されると、actionPerformedメソッドはJLabelを「Helloagain!」に更新する必要があります。そしてそれはそうです、しかしなぜそれがそれをするのか私を混乱させます。
しかし、私は新しいJLabelを返却する必要があると思いましたか?HelloListenerにJLabelを渡すと、そのJLabelは渡された後のHelloListenerクラスのプロパティではありませんか?それで、それが更新するとき、それはHelloListenerの1つだけを更新します、そしてそれから私はそれを返さなければなりませんか?
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!");
}
}