ActionListener出现问题

时间:2013-09-16 21:41:03

标签: java swing jbutton actionlistener

我无法实现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);
        }
}

1 个答案:

答案 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");
      }
    });