1

我在实现 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);
        }
}
4

1 回答 1

2

不要向两者添加相同的按钮JFrames 添加相同的按钮。将侦听器添加到按钮。

添加两个按钮,但您可以让听众听到点击任一按钮。

    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 类的名称都以大写字母开头。如果您遵循此规则并自己习惯它,其他人将能够更轻松地阅读您的代码。而你他们的。

您可以通过不同的组件命名方式来帮助避免此错误。

通常一个名为“按钮”的变量被分配一个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");
      }
    });
于 2013-09-16T21:45:42.370 回答