[英]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
). 编译器抱怨,因为您的类不是抽象的,但它没有实现一个或多个声明它要实现的方法(特别是
actionPerformed
的ActionListener
方法)。 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.