2010-06-15 83 views
1

JFrameWithPanel不是抽象和java.awt.event.ActionListener不重写抽象方法的actionPerformed(java.awt.event.ActionEvent中) 公共类JFrameWithPanel延伸的JFrame实现的ActionListenerActionListener的不实施

我唐不会得到这个代码。 Book和Java站点告诉我这是该方法的语法,但这个错误再次出现。

import javax.swing.*; 
import javax.swing.JOptionPane; 
import java.awt.*; 
import java.awt.event.*; 
import java.lang.Math.*; 
import java.lang.Integer.*; 
import java.util.*; 
import java.util.Random; 
import java.io.*; 
import java.text.*; 
import java.text.DecimalFormat.*; 

public class JFrameWithPanel extends JFrame implements ActionListener 
{ 
JButton button = new JButton("Exit"); 

public JFrameWithPanel() 
{ 
    super("JFrame with Panel"); 

    JComboBox packageChoice = new JComboBox(); 
    packageChoice.addItem("A+ Certification"); 
    packageChoice.addItem("Network+ Certification "); 
    packageChoice.addItem("Security+ Certifictation"); 
    packageChoice.addItem("CIT Full Test Package"); 

    packageChoice.addActionListener(this); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JPanel pane = new JPanel(); 
    pane.add(button); 
    pane.add(packageChoice); 
    setContentPane(pane); 
    setSize(200,100); 
    setVisible(true); 

} 
} 

再后来

public class CreateJFrameWithPanel 
{ 
public static void main(String[] args) 
{ 
    JFrameWithPanel panel = new JFrameWithPanel(); 
} 
} 
+0

请注意,不必要地扩展类,比如'JFrame'是一个坏主意。正如实施随机接口(使用匿名内部类)。 Swing(和AWT)应该在AWT“EDT”线程中使用,因此需要'main'中的样板。你可能想要得到一本不同的书。 – 2010-06-15 14:32:33

回答

3

此类实现ActionListener接口。这意味着它必须实现的方法:

public void actionPerformed(ActionEvent) 

但是,您发布的类定义不包括这种方法,因此为什么你看到一个编译错误。要修复代码,尝试添加下面的方法:

public void actionPerformed(ActionEvent evt) { 
    Object obj = packageChoice.getSelectedItem(); 
    JOptionPane.showMessageDialog(this, "You selected: " + obj); 
} 
+0

我现在用getSelectionItem()得到错误 – 2010-06-15 14:34:34

+0

它应该读取“getSelectedItem()”(未更正)。你应该尝试提供更多关于错误的信息;否则很难/不可能诊断问题。此外,对于这种类型的编译错误,您应该做的第一件事是检查JDK API以查看该类是否存在该方法(JComboBox)。希望有所帮助。 – Adamski 2010-06-15 17:29:08

+0

很好的答案。这里有一些额外的提示:如果您使用的是Eclipse,您会在左侧看到一个错误“X”。如果您单击它,则可以通过为您尝试覆盖的方法添加框架来纠正问题;如果您使用Extends而不是Implements,请确保在您的方法前面使用@override。 @override会警告你方法签名是否不正确(这对于实现来说并不是必须的,因为你已经得到了你得到的错误,但是对于扩展你不会有任何错误,你的监听器根本不会触发) – 2010-06-29 18:30:49

1

implements ActionListener意味着你的类必须定义在ActionListener接口中定义的方法。它有一个方法:

void actionPerformed(java.awt.event.ActionEvent); 

所以你必须要有这个方法。你需要它,因为你的按钮需要一个动作监听器。

在该方法中,您可以定义单击按钮时发生的情况。