Java ActionListener error: incompatible types
J'ai un peu de difficulté à mettre en place un ActionListener sur un JButton, voici le code...
package pipes;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PipesUI extends javax.swing.JFrame {
Main main = new Main();
JButton addPipeButton = new JButton("Add Pipe");
public PipesUI(){
addUI();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void addUI(){
addPipeButton.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
if (e.getSource()==addPipeButton)
main.addPipe();
else
;
}
public static void main(String args[]) {
PipesUI pipesUI = new PipesUI(); // create an instance of the menu
pipesUI.setSize(500,500);
pipesUI.setVisible(true);
}
}
L'erreur est sur la ligne
addPipeButton.addActionListener(this);
L' (ce), il ne semble pas l'apprécier, le message d'erreur indique "incompatible types: PipesUI ne peut pas être convertie ActionListener'
Toute aide serait super merci.
- Qu'est-ce que
this
? De quel type est cette référence? - Je ne sais pas vraiment... C'est ma première fois en utilisant actionlisteners et j'ai vu "ce" écrit en ces crochets avant, donc j'ai simplement utilisé eux, ce qui devrait aller dans les crochets?
- Aucun bouton n'apparait sur mon JFrame soit, ce qui est à l'origine de cela?
Vous devez vous connecter pour publier un commentaire.
Vous avez créé votre
actionPerformed
méthode, mais vous n'avez pas à déclarer votre classe comme unActionListener
. Implémenter cette interface:JButton
à votreJFrame
. Ajouter.Au sein d'une instance de méthode ou d'un constructeur,
this
est une référence à l'objet — l'objet dont la méthode ou le constructeur est appelé. Ainsi, laaddActionListener(ActionListener)
méthode est en attente d'une mise en œuvre instance de l'interfaceActionListener
. Lorsque vous êtes de passage àthis
àaddActionListener
fonction, qui est actuellement référence à l'instance dePipesUI
n'a pas été implémentée avecActionListener
.Mettre en œuvre les
ActionListener
comme suit:Mais à partir de votre code, je ne vois pas que vous avez ajouté le
addPipeButton
à un conteneur. Il suffit d'ajouter le bouton à votre imagePipesUI
à l'aide deadd(addPipeButton)
comme indiqué suit:Ce
Jframe.add(addPipeButton)
va ajouter de laaddPipeButton
bouton pour le cadre du volet de contenu qui aBorderLayout
en tant que par défaut le gestionnaire de configuration.Je suppose que vous avez vu
addActionListener(this)
dans un autre endroit et a décidé de l'utiliser ici. L'autre endroit est un contexte totalement différent, commethis
était une instance de ActionListner.Procédez comme suit:
Edit: Vous avez déjà
ActionListener
méthodes de votre classe. Dans ce cas, vous pouvez utiliser:Une solution possible:
L'autre:
et ainsi de suite et ainsi de suite.