Java ítem addActionListener error
betsprite
-
betsprite -
betsprite -
Buenas noches,
Estoy haciendo una interfaz en Java y cuando intento introducir la función addActionListener, aparece el siguiente error:
*****
Exception in thread "main" java.lang.ClassCastException: Fenetre cannot be cast to java.awt.event.ActionListener
at Fenetre.<init>(Fenetre.java:36)
at Test.main(Test.java:17)
*****
Aquí está mi código que no tiene mucha complicación (en resumen, quiero que cuando haga clic en un botón se me muestre: has hecho clic "tantas" veces en el botón):
------------------------------------------------------------------------------------------------------------------------------
Class Panneau
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.*;
public class Panneau extends JPanel{
public void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.BLACK);
g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
g2d.setColor(Color.WHITE);
Font font = new Font("Arial", Font.BOLD, 14);
g2d.setFont(font);
g2d.drawString("Bonjour !", 10, 15);
}
}
------------------------------------------------------------------------------------------------------------------------------
Class Fenetre
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Fenetre extends JFrame{
private JButton bouton = new JButton("bouton");
private JPanel container = new JPanel();
private JLabel label1 = new JLabel("label1");
private Panneau pan = new Panneau();
private int compteur;
public Fenetre(){
this.setTitle("Ma première fenêtre java");
this.setSize(400, 500);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
container.setLayout(new BorderLayout());
container.add(label1, BorderLayout.NORTH);
container.add(bouton, BorderLayout.SOUTH);
container.add(pan, BorderLayout.CENTER);
container.setBackground(Color.WHITE);
bouton.addActionListener(this); // WARNING ICI
label1.setHorizontalAlignment(JLabel.CENTER);
this.setContentPane(container);
this.setVisible(true);
}
public void actionPerformed(ActionEvent arg0){
this.compteur++;
label1.setText("vous avez cliqué" + this.compteur + " fois");
}
}
------------------------------------------------------------------------------------------------------------------------------
La class main
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Test {
public static void main(String[] args) {
Fenetre fen = new Fenetre();
}
}
------------------------------------------------------------------------------------------------------------------------------
Je rappelle l'erreur (probablement liée au WARNING dans la classe Fenetre) :
*****
Exception in thread "main" java.lang.ClassCastException: Fenetre cannot be cast to java.awt.event.ActionListener
at Fenetre.<init>(Fenetre.java:36)
at Test.main(Test.java:17)
*****
Voila j'espère que vous pourrez m'aider.
Merci d'avance!
Cordialement.
Estoy haciendo una interfaz en Java y cuando intento introducir la función addActionListener, aparece el siguiente error:
*****
Exception in thread "main" java.lang.ClassCastException: Fenetre cannot be cast to java.awt.event.ActionListener
at Fenetre.<init>(Fenetre.java:36)
at Test.main(Test.java:17)
*****
Aquí está mi código que no tiene mucha complicación (en resumen, quiero que cuando haga clic en un botón se me muestre: has hecho clic "tantas" veces en el botón):
------------------------------------------------------------------------------------------------------------------------------
Class Panneau
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.*;
public class Panneau extends JPanel{
public void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.BLACK);
g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
g2d.setColor(Color.WHITE);
Font font = new Font("Arial", Font.BOLD, 14);
g2d.setFont(font);
g2d.drawString("Bonjour !", 10, 15);
}
}
------------------------------------------------------------------------------------------------------------------------------
Class Fenetre
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Fenetre extends JFrame{
private JButton bouton = new JButton("bouton");
private JPanel container = new JPanel();
private JLabel label1 = new JLabel("label1");
private Panneau pan = new Panneau();
private int compteur;
public Fenetre(){
this.setTitle("Ma première fenêtre java");
this.setSize(400, 500);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
container.setLayout(new BorderLayout());
container.add(label1, BorderLayout.NORTH);
container.add(bouton, BorderLayout.SOUTH);
container.add(pan, BorderLayout.CENTER);
container.setBackground(Color.WHITE);
bouton.addActionListener(this); // WARNING ICI
label1.setHorizontalAlignment(JLabel.CENTER);
this.setContentPane(container);
this.setVisible(true);
}
public void actionPerformed(ActionEvent arg0){
this.compteur++;
label1.setText("vous avez cliqué" + this.compteur + " fois");
}
}
------------------------------------------------------------------------------------------------------------------------------
La class main
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Test {
public static void main(String[] args) {
Fenetre fen = new Fenetre();
}
}
------------------------------------------------------------------------------------------------------------------------------
Je rappelle l'erreur (probablement liée au WARNING dans la classe Fenetre) :
*****
Exception in thread "main" java.lang.ClassCastException: Fenetre cannot be cast to java.awt.event.ActionListener
at Fenetre.<init>(Fenetre.java:36)
at Test.main(Test.java:17)
*****
Voila j'espère que vous pourrez m'aider.
Merci d'avance!
Cordialement.
Configuration: Windows XP Internet Explorer 8.0</init></init>
2 respuestas
-
Tengo entendido que quieres una traducción al español del texto en francés que compartiste. Aquí está la traducción fiel al sentido original, conservando el tono y el formato HTML cuando corresponde:
Bueno, tengo novedades. He añadido en mi clase Fenetre dos clases internas, cada una de ellas capaz de ejecutar una acción cuando se escucha un botón (ahora hay 2).
Y ahora ¡milagro! ya no hay errores :p
Me gustaría entender, no obstante, de dónde venía ese error en el addActionListener ...
Además, con las dos clases internas nuevas, ahora, cuando se escucha un botón, debo poner:
"bouton1.addActionListener( new Bouton1Listener);" en lugar de "bouton1.addActionListener ( this );" para indicar que era la Fenêtre la que escuchaba el botón1.
Pero ahora que Bouton1Listener es una clase interna de Fenetre, ¿cómo sabe el programa que sigue siendo la Fenêtre la que escucha el botón1 y no el objeto Bouton1Listener?
Aquí está, por cierto, el código modificado de la clase Fenetre:
------------------------------------------------------------------------------------------------------------------------------
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Fenetre extends JFrame{
private JButton bouton1 = new JButton("bouton1");
private JButton bouton2 = new JButton("bouton2");
private JPanel container1 = new JPanel();
private JPanel container2 = new JPanel();
private JLabel label1 = new JLabel("label1");
private Panneau pan = new Panneau();
public Fenetre(){
this.setTitle("Ma première fenêtre java");
this.setSize(400, 500);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
container1.setLayout(new BorderLayout());
container1.add(label1, BorderLayout.NORTH);
label1.setHorizontalAlignment(JLabel.CENTER);
container1.add(container2, BorderLayout.SOUTH);
container2.add(bouton1);
container2.add(bouton2);
container1.add(pan, BorderLayout.CENTER);
container1.setBackground(Color.WHITE);
bouton1.addActionListener(new Bouton1Listener());
bouton2.addActionListener(new Bouton2Listener());
this.setContentPane(container1);
this.setVisible(true);
}
class Bouton1Listener implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
label1.setText("Vous avez cliqué sur le bouton 1");
}
}
class Bouton2Listener implements ActionListener{
public void actionPerformed(ActionEvent e) {
label1.setText("Vous avez cliqué sur le bouton 2");
}
}
------------------------------------------------------------------------------------------------------------------------------
Voilà, j’espère que vous pourrez m’aider à comprendre ces quelques petites choses.
Merci encore :) -
Nadie tiene el valor de leer estas pocas líneas de código para ayudarme a encontrar mi error (o una noción que quizá no conozca, ya que el error desaparece con clases internas y de las que ya hice algunas preguntas arriba) ?
Gracias de antemano. Espero que puedan ayudarme a desbloquearme :s.
¡Que tengas un buen día!