java 如何使用非抽象类实现 ActionListener?爪哇
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15562918/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How can I implement ActionListener with a non abstract class? Java
提问by Nick Burt
I've just recently started learning how to use swing, and have been following a tutorial I found online. I've basically followed the tutorial "word for word" but I get the error:
我最近才开始学习如何使用 Swing,并且一直在学习我在网上找到的教程。我基本上是按照教程“逐字逐句”进行的,但出现错误:
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 实现到我的类(记分板)中?
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...
另外,如果你能解释抽象类是什么,那也有帮助,但实际上我只需要知道如何让 JButtons 现在工作......
Thanks!
谢谢!
采纳答案by Sudhanshu Umalkar
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
回答by Ted Hopp
The compiler is complaining because your class is notabstract but it does not implement one or more methods that it is declared to implement (specifically the method actionPerformed
of ActionListener
). I think you simply need to rename your actions
method:
编译器抱怨,因为您的类不是抽象的,但它没有实现一个或多个方法,它是在宣布实行(具体方法actionPerformed
的ActionListener
)。我认为您只需要重命名您的actions
方法:
public void actions(ActionEvent e){. . .
public void actions(ActionEvent e){. . .
public void actionPerformed(ActionEvent e){. . .
回答by Ankit
you need to check whether all abstract
methods of ActionListener
are implemented.
您需要检查是否实现了所有abstract
方法ActionListener
。
you are missing defination of void actionPerformed(ActionEvent e)
你缺少定义 void actionPerformed(ActionEvent e)