2010-06-15 13 views
1

JFrameWithPanel n'est pas abstraite et ne remplace pas la méthode abstraite actionPerformed (java.awt.event.ActionEvent) dans java.awt.event.ActionListener public class JFrameWithPanel extends JFrame implements ActionListenerActionListener n'applique pas

I Don Ne reçois pas ce code. Le livre et le site Java me disent que c'est la syntaxe de la méthode, mais encore une fois cette erreur apparaît constamment.

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); 

} 
} 

puis plus tard

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

Notez que l'extension de classes, telles que 'JFrame' inutilement est une mauvaise idée. Tout comme implémenter des interfaces aléatoires (utiliser des classes internes anonymes). Swing (et AWT) devrait être utilisé à partir du thread AWT "EDT", et a donc besoin d'un passe-partout dans 'main'. Vous voudrez peut-être obtenir un livre différent. –

Répondre

3

La classe implémente l'interface ActionListener. Cela signifie qu'il doit mettre en œuvre une méthode:

public void actionPerformed(ActionEvent) 

Cependant, la définition de classe que vous avez posté ne comprend pas cette méthode, donc pourquoi vous voyez une erreur de compilation. Pour corriger le code, essayez d'ajouter la méthode suivante:

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

Je reçois une erreur maintenant avec le getSelectionItem() –

+0

Il aurait dû lire "getSelectedItem()" (non corrigé). Vous devriez essayer et fournir plus d'informations sur les erreurs; sinon, il devient difficile/impossible de diagnostiquer le problème. En outre, avec ce type d'erreur de compilation, la première chose à faire est de vérifier l'API JDK pour voir si la méthode existe sur la classe (JComboBox). J'espère que cela pourra aider. – Adamski

+0

Bonne réponse. Voici quelques conseils supplémentaires: Si vous utilisez Eclipse, vous verrez une erreur "X" sur le côté gauche. Si vous cliquez dessus, il peut corriger le problème en ajoutant le cadre de la méthode que vous essayez de remplacer; Si vous utilisez Extends au lieu de Implements, veillez à utiliser @override devant votre méthode. @override vous avertira si la signature de la méthode est incorrecte (ce n'est pas vraiment nécessaire avec les outils car vous aurez déjà l'erreur que vous avez, mais avec extend vous n'auriez pas eu d'erreur, votre écouteur ne se déclenchera jamais) –

1

implements ActionListener signifie que votre classe doit définir les méthodes qui sont définies dans l'interface ActionListener. Il a une méthode:

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

Vous devez donc avoir cette méthode. Vous en avez besoin, car votre bouton a besoin d'un écouteur d'actions.

Dans cette méthode, vous définissez ce qui se passe lorsque vous cliquez sur le bouton.