获取错误:无法实例化类型java.awt.event.ActionListener

时间:2015-01-01 17:28:06

标签: java swing awt instance actionlistener

所以我正在尝试制作Tic-Tac-Toe游戏,而且我对JFrames,面板,几乎所有的GUI内容都是全新的。我希望这不会被认为是重复的,因为我扫描了这个网站几个小时试图找到答案。这很好,因为我对此有了新的认识,可能有一个答案,但我不明白。无论如何,错误在标题中说明,我的目标是弄清楚如何检测单击哪个按钮,然后使用if / else语句通过使用方法来控制接下来发生的事情。我意识到一些导入的内容没有被使用,但我计划在他们进一步使用该程序时可能会使用它们。再一次,我是新手,以及周围的一切。我的大部分知识都是自学成才,所以对任何帮助都表示赞赏。

    import java.util.Scanner;
    import java.lang.Object;
    import java.awt.Component;
    import java.awt.Container;
    import java.awt.Window;
    import java.awt.Frame;
    import javax.swing.JFrame;
    import java.awt.FlowLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;


public class ticTacToe implements ActionListener //uses action listener because of the use of buttons, so it needs to know when the buttons are clicked
{
  public static JFrame menuFrame = new JFrame("Tic-Tac-Toe");
  public static JPanel board = new JPanel(), menu = new JPanel();
  public static JButton instruct = new JButton("Instructions"), pVP = new JButton("Player VS. Player"), pVC = new JButton("Player VS. Computer");

  public static void main (String[]args)
  {
    menu();
  }
  public static void menu ()//the main menu of the game
  {
    menu.setLayout(new FlowLayout());//arranges the layout of the buttons on the panel

    menu.add(instruct);//adds the instruction button

    menu.add(pVP);//adds the player vs player button
    menu.add(pVC);//adds the player vs computer button

    menuFrame.add(menu);//creates the panel
    menuFrame.setSize(450, 78);
    menuFrame.setLocationRelativeTo(null);//sets the location to the centre of the screen
    menuFrame.setVisible(true);//makes the menu visible
  }
   public void actionPerformed(ActionEvent actionEvent) {
instruct.addActionListener(new ActionListener());
          System.out.println(actionEvent.getActionCommand());
      }
}

1 个答案:

答案 0 :(得分:2)

这是instruct.addActionListener(new ActionListener());

ActionListener是您必须在子类中实现的接口。

为了使其有意义,最简单的解决方法是将该行更改为instruct.addActionListener(this),并将其移动到构造函数中,因为您的类已经实现了ActionListener。如果您使用此解决方案,您的游戏逻辑代码将被移动到actionPerformed()类的Menu()方法中。或者你可以创建一个新类来实现它,游戏逻辑将进入那里:

public class TicTacToeListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        // game logic here
    }
}

public class ticTacToe implements ActionListener {
    public void actionPerformed(ActionEvent actionEvent) {
        instruct.addActionListener(new TickTacToeListener);
        System.out.println(actionEvent.getActionCommand());
    }
}