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

我刚刚开始学习如何使用swing,并且一直在关注我在网上找到的教程。 我基本上按照“逐字逐句”的教程,但我得到错误:

ScoreBoard不是抽象的,并且不会覆盖ActionListener中的抽象方法actionPerformed(ActionEvent)

所以我的问题是,如果类不是抽象的,我如何将ActionListener实现到我的类(ScoreBoard)中?

这是整个代码:(因为我不知道问题出在哪里)

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 

另外,如果你能解释一下Abstract类是什么,那也有帮助,但实际上我只需要知道如何让JButton现在工作……

谢谢!

将此方法放入ScoreBoard类 –

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

如果你不想让ScoreBoard类实现ActionListener,你也可以用这种方式添加监听器 –

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

如果要共享侦听器,请创建其实例并将其添加到所有按钮。

要了解抽象类,请阅读http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

编译器抱怨,因为您的类不是抽象的,但它没有实现一个或多个声明它要实现的方法(特别是actionPerformedActionListener方法)。 我想你只需要重命名你的actions方法:

 public void actions(ActionEvent e){. . . 

 public void actionPerformed(ActionEvent e){. . . 

您需要检查是否已实现ActionListener所有abstract方法。

你缺少对void actionPerformed(ActionEvent e)