简体   繁体   English

如何使用非抽象类实现ActionListener? Java的

[英]How can I implement ActionListener with a non abstract class? Java

I've just recently started learning how to use swing, and have been following a tutorial I found online. 我刚刚开始学习如何使用swing,并且一直在关注我在网上找到的教程。 I've basically followed the tutorial "word for word" but I get the error: 我基本上按照“逐字逐句”的教程,但我得到错误:

ScoreBoard is not abstract and does not override abstract method actionPerformed(ActionEvent) in ActionListener ScoreBoard不是抽象的,并且不会覆盖ActionListener中的抽象方法actionPerformed(ActionEvent)

So my question is, how can I implement ActionListener into my class (ScoreBoard) if the class is not abstract? 所以我的问题是,如果类不是抽象的,我如何将ActionListener实现到我的类(ScoreBoard)中?

Here is the entire code: (Because I have no idea where the problem could be) 这是整个代码:(因为我不知道问题出在哪里)

package scoreboard;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class ScoreBoard implements ActionListener{

//Class Variables
int redScore = 0;
int blueScore = 0;

//Class Objects
JPanel titlePanel, scorePanel, buttonPanel;
JLabel redLabel, blueLabel, redLabelT, blueLabelT;
JButton redButton, blueButton, resetButton;


public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable(){
        public void run(){
            createFrame();
        }
    });

}//End Method

public static void createFrame(){

    JFrame frame = new JFrame("ScoreBoard");
    JFrame.setDefaultLookAndFeelDecorated(true);

    ScoreBoard panel = new ScoreBoard();
    frame.setContentPane(panel.contentPane());

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.setSize(250, 190);
    frame.setVisible(true);

}//End Method

public JPanel contentPane(){

    JPanel basePanel = new JPanel();
    basePanel.setLayout(null);
    basePanel.setBackground(Color.black);

    //Title
    titlePanel = new JPanel();
    titlePanel.setLayout(null);
    titlePanel.setOpaque(false);
    titlePanel.setLocation(10, 0);
    titlePanel.setSize(250, 30);
    basePanel.add(titlePanel);

    redLabelT = new JLabel("Red Team");
    redLabelT.setLocation(0, 0);
    redLabelT.setSize(100, 30);
    redLabelT.setForeground(Color.red);
    redLabelT.setHorizontalAlignment(0);
    titlePanel.add(redLabelT);

    blueLabelT = new JLabel("Blue Team");
    blueLabelT.setLocation(120, 0);
    blueLabelT.setSize(100, 30);
    blueLabelT.setForeground(Color.blue);
    blueLabelT.setHorizontalAlignment(0);
    titlePanel.add(blueLabelT);

    //Score
    scorePanel = new JPanel();
    scorePanel.setLayout(null);
    scorePanel.setOpaque(false);
    scorePanel.setLocation(10, 40);
    scorePanel.setSize(250, 30);
    basePanel.add(scorePanel);

    redLabel = new JLabel("" + redScore);
    redLabel.setLocation(0, 0);
    redLabel.setSize(100, 30);
    redLabel.setForeground(Color.white);
    redLabel.setHorizontalAlignment(0);
    scorePanel.add(redLabel);

    blueLabel = new JLabel("" + blueScore);
    blueLabel.setLocation(120, 0);
    blueLabel.setSize(100, 30);
    blueLabel.setForeground(Color.white);
    blueLabel.setHorizontalAlignment(0);
    scorePanel.add(blueLabel);

    //Buttons
    buttonPanel = new JPanel();
    buttonPanel.setLayout(null);
    buttonPanel.setOpaque(false);
    buttonPanel.setLocation(10, 80);
    buttonPanel.setSize(250, 70);
    basePanel.add(buttonPanel);

    redButton = new JButton("Red Score");
    redButton.setLocation(0, 0);
    redButton.setSize(100, 30);
    redButton.addActionListener(this);
    buttonPanel.add(redButton);

    blueButton = new JButton("Blue Score");
    blueButton.setLocation(120, 0);
    blueButton.setSize(100, 30);
    blueButton.addActionListener(this);
    buttonPanel.add(blueButton);

    resetButton = new JButton("Reset");
    resetButton.setLocation(0, 40);
    resetButton.setSize(220, 30);
    resetButton.addActionListener(this);
    buttonPanel.add(resetButton);

    return basePanel;

   }//End Method

public void actions(ActionEvent e){

    if(e.getSource() == redButton){

        redScore ++;
        redLabel.setText("" + redScore);

    }else if(e.getSource() == blueButton){

        blueScore++;
        blueLabel.setText("" + blueScore);

    }else if(e.getSource() == resetButton){

        redScore = 0;
        blueScore = 0;
        redLabel.setText("" + redScore);
        blueLabel.setText("" + blueScore);

    }

}//End Method

}//End Class

Also if you can explain what an Abstract class is, that'd help too, but really I just need to know how to get JButtons working for now... 另外,如果你能解释一下Abstract类是什么,那也有帮助,但实际上我只需要知道如何让JButton现在工作......

Thanks! 谢谢!

The compiler is complaining because your class is not abstract but it does not implement one or more methods that it is declared to implement (specifically the method actionPerformed of ActionListener ). 编译器抱怨,因为您的类不是抽象的,但它没有实现一个或多个声明它要实现的方法(特别是actionPerformedActionListener方法)。 I think you simply need to rename your actions method: 我想你只需要重命名你的actions方法:

 
 
 
  
  public void actions(ActionEvent e){. . .
 
  

public void actionPerformed(ActionEvent e){. . .

you need to check whether all abstract methods of ActionListener are implemented. 您需要检查是否已实现ActionListener所有abstract方法。

you are missing defination of void actionPerformed(ActionEvent e) 你缺少对void actionPerformed(ActionEvent e)

Put this method into your ScoreBoard class- 将此方法放入ScoreBoard类 -

@Override
public void actionPerformed(ActionEvent ae) {
     // do something
}

You can also add listener in this way, if you don't want ScoreBoard class to implement ActionListener- 如果你不想让ScoreBoard类实现ActionListener,你也可以用这种方式添加监听器 -

redButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent ae) {
         // do something
    }
};

If you want to share the listener, create its instance and add it to all the buttons. 如果要共享侦听器,请创建其实例并将其添加到所有按钮。

To learn about abstract classes, read this http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html 要了解抽象类,请阅读http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用Java中的非抽象类实现ActionListener - How do I implement ActionListener with a non abstract class in Java 如何在Java中实现抽象的单例类? - How can I implement an abstract singleton class in Java? 如何创建and抽象类的数组,以便可以将其初始化为特定的非抽象类(java) - How can I create an array of and Abstract class such that I can initialize it to a specific non-abstract class (java) 我该如何实现ActionListener? - How Can I implement an ActionListener to this? 如何在ActionListener中实现类? - How do I implement a Class into an ActionListener? Java错误:类'Anonymous'必须被声明为abstract或在'ActionListener'中实现抽象方法'actionPerformed(ActionEvent)' - Java Error: Class 'Anonymous' must either be declared abstract or implement abstract method 'actionPerformed(ActionEvent)' in 'ActionListener' 匿名类可以实现抽象类的非抽象方法吗? - Can an anonymous class implement the non abstract method of the abstract class? 如何在Java中实现抽象静态方法? - How can I implement abstract static methods in Java? 我怎样才能调用Abstract类的非静态方法 - How can i call an non static method of Abstract class 如何在Groovy中实现抽象Java类? - How to implement abstract Java class in Groovy?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM