Bir*_*man 1 java swing actionlistener
我刚刚开始了解Java本身和Java Swing,我在理解"Action Listener"概念时遇到了一些问题.人们说C#和Java非常相似,但是当你真正试用它们并进行比较时,这是另一个故事.
我有一个按钮的以下自动生成的动作侦听器:
btnNewButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
lblNylabel.setText("New label text");
}
});
Run Code Online (Sandbox Code Playgroud)
我这样理解:
是否有可能以更加理解/简单的方式来帮助我理解ActionListener概念?
aio*_*obe 12
我不明白的是我不能自己实现ActionListener类,但它可以作为方法调用中的参数??
当你这样做
new ActionListener() {
public void actionPerformed(ActionEvent e) {
lblNylabel.setText("New label text");
}
}
Run Code Online (Sandbox Code Playgroud)
你实际上是在创建一个匿名子类的实例ActionListener.
它在语义上等同于做
class AnonymousActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
lblNylabel.setText("New label text");
}
}
btnNewButton.addActionListener(new AnonymousActionListener());
Run Code Online (Sandbox Code Playgroud)
(还有tada,作为奖励,你刚学会了你可以在Java中使用方法本地类 ;-)
以下是一些常见的替代方案:
使用单独的普通类:
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
lblNylabel.setText("New label text");
}
}
class YourClass {
public void yourMethod() {
...
btnNewButton.addActionListener(new MyActionListener());
}
}
Run Code Online (Sandbox Code Playgroud)
(只有在其他类可以访问所需变量的情况下才有可能.)
与上面相同,但内部(非静态)类:
class YourClass {
public void yourMethod() {
...
btnNewButton.addActionListener(new MyActionListener());
}
// Inner class
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
lblNylabel.setText("New label text");
}
}
}
Run Code Online (Sandbox Code Playgroud)
(这里lblNylabel可能是内部类的范围.)
让封闭类本身实现ActionListener并使用this作为参数addActionListener:
class YourClass implements ActionListener {
public void yourMethod() {
...
btnNewButton.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
lblNylabel.setText("New label text");
}
}
Run Code Online (Sandbox Code Playgroud)