如何使用非抽象类实现 ActionListener?爪哇 [英] How can I implement ActionListener with a non abstract class? Java
问题描述
我最近才开始学习如何使用 Swing,并且一直在学习我在网上找到的教程.我基本上是按照教程逐字逐句"进行的,但出现错误:
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:
ScoreBoard 不是抽象的,也不会覆盖抽象方法ActionListener 中的 actionPerformed(ActionEvent)
ScoreBoard is not abstract and does not override abstract method actionPerformed(ActionEvent) in ActionListener
所以我的问题是,如果类不是抽象类,我如何将 ActionListener 实现到我的类 (ScoreBoard) 中?
So my question is, how can I implement ActionListener into my class (ScoreBoard) if the class is not abstract?
这是完整的代码:(因为我不知道问题出在哪里)
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
另外,如果你能解释抽象类是什么,那也会有帮助,但实际上我现在只需要知道如何让 JButtons 工作......
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...
谢谢!
推荐答案
将此方法放入您的 ScoreBoard 类-
Put this method into your ScoreBoard class-
@Override
public void actionPerformed(ActionEvent ae) {
// do something
}
如果不想让ScoreBoard类实现ActionListener,也可以这样添加监听器-
You can also add listener in this way, if you don't want ScoreBoard class to implement 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.
要了解抽象类,请阅读此 http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
To learn about abstract classes, read this http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
这篇关于如何使用非抽象类实现 ActionListener?爪哇的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!