下面这段代码有什么问题,如何改正import javax.swing.*; import java.awt.*; import java.awt.event.*; class InnerButton{ JFrame frame; JButton b; public static void main(String[] args){ InnerButton gui = new InnerButton(); gui.go(); } public void go(){ frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); b = new JButton("A"); b.addActionListener(); frame.getContentPane().add(BorderLayout.SOUTH,b); frame.setSize(200,100); frame.setVisible(true); } class BListener extends ActionListener{ public void actionPerformed(ActionEvent e){ if(b.getText().equals("A")){ b.setText("B"); } else{ b.setText("A"); } } } }
时间: 2024-03-08 21:50:53 浏览: 64
这段代码存在两个问题:
1. b.addActionListener()方法调用时未传递参数,导致没有为按钮b添加事件监听器。
2. BListener类没有被使用,也就是说,按钮b并没有使用BListener类作为其事件监听器。
要改正这些问题,需要在b.addActionListener()方法中传递一个BListener类的实例,同时将BListener类的实例设置为按钮b的事件监听器。修改后的代码如下所示:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class InnerButton{
JFrame frame;
JButton b;
public static void main(String[] args){
InnerButton gui = new InnerButton();
gui.go();
}
public void go(){
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
b = new JButton("A");
b.addActionListener(new BListener()); // 添加事件监听器
frame.getContentPane().add(BorderLayout.SOUTH,b);
frame.setSize(200,100);
frame.setVisible(true);
}
class BListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if(b.getText().equals("A")){
b.setText("B");
}
else{
b.setText("A");
}
}
}
}
```
在修改后的代码中,我们使用了b.addActionListener(new BListener())语句为按钮b添加了事件监听器,并将BListener类的实例作为参数传递给了addActionListener()方法。同时,我们将BListener类设置为按钮b的事件监听器,这样当按钮被点击时,就会执行BListener类中的actionPerformed()方法中的代码。
阅读全文