我无法实现ActionListener。在我的类addbutton中它不会让我屁股ActionListener。我想要做的是显示两个JFrame,并点击可以作为一个按钮。我有其他一切工作期望按钮点击操作。按钮出现,但单击它什么都不做,所以我添加一个ActionListener,它没有为我的方法定义。我做错了什么,我该怎么做才能解决它。谢谢。
import java.awt.event.ActionEvent;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JButton;
@SuppressWarnings("serial")
public class PictureTest extends JFrame {
public static class addbutton extends JFrame implements ActionListener{
public addbutton() {
JFrame button = new JFrame();
JButton take = new JButton("Take Please");
button.add(take);
add(take);
button.addActionListener(this); //This line is the issue
}
public void actionPerformed(ActionEvent e) {
e.getSource();
System.out.println("Here");
}
}
public PictureTest() {
ImageIcon image = new ImageIcon("c:/Vending/pepsi.jpg");
JLabel label = new JLabel(image);
JPanel soda = new JPanel();
soda.add(label);
add(soda);
}
public static void main(String[] args) {
PictureTest frame = new PictureTest();
addbutton button = new addbutton();
frame.setSize(250, 450);
frame.setTitle("Pepsi");
frame.setLocation(200, 100);
frame.setUndecorated(true);
button.setSize(105, 25);
button.setLocation(275, 550);
button.setUndecorated(true);
button.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
button.setVisible(true);
}
}
答案 0 :(得分:2)
不要向JFrame
添加相同的按钮。将监听器添加到按钮。
添加两个按钮,但您可以让听众听到任何一个按钮的点击。
JButton take = new JButton("Take Please");
button.add(take);
take.addActionListener(this); // listen to the button
JButton take2 = new JButton("Take Please");
add(take2);
take2.addActionListener(this); // also listen to the other button
此外,按照惯例,所有Java类的名称都以大写字母开头。如果您遵循此规则并自己习惯,其他人将能够更轻松地阅读您的代码。你是他们的。
您可以使用不同的命名组件方式来帮助避免此错误。
通常为名为“button”的变量分配一个JButton
对象,而不是JFrame
,这通常会被命名,在这种情况下,类似“otherFrame”,表示它是一个框架,那里是另一个在这个时候也在发挥作用的人。
另一种方法是使用anonymouse内部类来进行监听,但是你不能轻易地用它来听两个按钮。所以,假设一个JFrame中只有一个按钮:
JButton take = new JButton("Take Please");
button.add(take);
take.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
e.getSource();
System.out.println("Here");
}
});