Bug ActionListener (Interface graphique java)

Fermé
Epic_sans.fr - Modifié le 9 août 2020 à 20:26
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 10 août 2020 à 13:05
Bonjour,
Mon ide (eclipse) marque faux le nom de ma classe (Action), je ne sais pas d'où cela peut bien venir, la console m'affiche:
Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
 Action cannot be resolved to a type
 Action cannot be resolved to a type
 Action cannot be resolved to a type
 Action cannot be resolved to a type
 Cannot instantiate the type ActionListener
 at cookie.CookieMain.createIG(CookieMain.java:56)
 at cookie.CookieMain.<init>(CookieMain.java:26)
 at cookie.CookieMain.main(CookieMain.java:22)

mon code:
package cookie;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class CookieMain {
 static int cookiesnb; 
 static boolean starttimer; 
 static JLabel labelcompteur = new JLabel("Cookies: "+cookiesnb); 
 public static void main(String[] args) {
  new CookieMain();

 }
 public CookieMain(){
  createIG(); 
 }
 public void createIG(){
  JFrame window = new JFrame(); 
  window.setTitle("Epic Clicker"); 
  window.setSize(900, 700);
  window.setLocationRelativeTo(null);
  window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  window.getContentPane().setBackground(Color.DARK_GRAY);;
  window.setLayout(null);
  
  JPanel cookiePanel = new JPanel(); 
  cookiePanel.setBounds(100,220,150,150);
  cookiePanel.setBackground(Color.DARK_GRAY);
  window.add(cookiePanel); 
  
  JPanel autopanel = new JPanel(); 
  autopanel.setBounds(550, 200, 300, 400);
  autopanel.setBackground(Color.blue);
  autopanel.setLayout(new BorderLayout(1,1));
  window.add(autopanel); 
  
  ImageIcon epicimg = new ImageIcon(getClass().getClassLoader().getResource("logo.png"));
  
  JButton epicButton = new JButton("."); 
  epicButton.setBackground(Color.DARK_GRAY); 
  epicButton.setBorder(null);
  epicButton.setIcon(epicimg);
  epicButton.setBounds(100,220,150,150);
  cookiePanel.add(epicButton); 
  epicButton.addActionListener(new Action());
  
  
  JButton normalClicker = new JButton("Normal Clicker");
  normalClicker.addActionListener(new Action());
  autopanel.add(normalClicker);
  
  JButton advancedClicker = new JButton("Advanced Clicker"); 
  advancedClicker.addActionListener(new Action());
  autopanel.add(advancedClicker); 
  
  JButton momClicker = new JButton("Mom Clicker"); 
  autopanel.add(momClicker); 
  momClicker.addActionListener(new Action());
  
  JButton dadClicker = new JButton("Dad Clicker"); 
  autopanel.add(dadClicker); 
  dadClicker.addActionListener(new Action());
  
  JPanel panelcompteur = new JPanel(); 
  panelcompteur.setBounds(425,25,200,100);
  panelcompteur.setLayout(new BorderLayout(1,2));
  panelcompteur.setBackground(Color.DARK_GRAY);
  window.add(panelcompteur); 
  
  labelcompteur.setFont(new Font("Comic Sans MS", 3, 19));
  labelcompteur.setForeground(Color.white);
  panelcompteur.add(labelcompteur); 
  window.setVisible(true);

  
  
 }
}
static class Action implements ActionListener(){
public  void actionPerformed(ActionEvent e){  

 if(e.getActionCommand().contains(".")) {
  System.out.println("oui "+cookiesnb); 
  cookiesnb++; 
  labelcompteur.setText("Cookies: "+cookiesnb); 
 }
 if(e.getActionCommand().contains("Normal Clicker")) {
  
  
 
 }


}
}

(oui, c'est une sorte de plagiat de cookie clicker que j'ai fait pour m'entrainer , mdr)
Excusez moi s'il y a des impuretées dans mon code, j'ai essayer de regler ça à la vas vite donc.. je n'ai pas pu faire un code très propre. Merci de votre comprehension.
Bonne journée à vous.
Configuration: Linux / Firefox 79.0
A voir également:

3 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
9 août 2020 à 20:30
Bonjour,

Je n'ai pas de PC pour tester, donc il y a peut être d'autres erreurs, mais ligne 90 tu as écrit
implements ActionListener(){
mais les parenthèses ne devraient pas être là il faut écrire
implements ActionListener {
1
Merci, mais cela ne fonctionne toujours pas. Le nom de la classe est toujours souligné en rouge et, les variables sont soulignées en rouge.. pourtant je les ai mises en statique mais rien ne vas. mais je pense que c'est en réglant le problème de la classe qu'elles vont être détecter normalement. nouvelles erreurs:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Illegal modifier for the class Action; only public, abstract & final are permitted
cookiesnb cannot be resolved to a variable
cookiesnb cannot be resolved to a variable
labelcompteur cannot be resolved
cookiesnb cannot be resolved to a variable

at cookie.Action.<init>(CookieMain.java:90)
at cookie.CookieMain.createIG(CookieMain.java:56)
at cookie.CookieMain.<init>(CookieMain.java:26)
at cookie.CookieMain.main(CookieMain.java:22)
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
9 août 2020 à 22:51
J'ai du mal à voir l'indentation de ton code sur le forum mais vu le message je dirais que ta
static class Action
a été déclarée après la classe CookieMain alors qu'elle aurait dû être déclarée à l'intérieur de la classe (ou alors il faut enlever le mot clé static).
0
Merci mec, tu as raison. excuse moi, j'ai du mal avec le vocabulaire de codage.. Et je savais pas que cela était possible de déclarer une classe dans une classe ! merci pour cette information ! :D (Sinon, aurais-tu des sources pour apprendre le "vocabulaire de codage" en video stp ? car j'ai du mal à m'exprimer sur ce que je fais..)
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
10 août 2020 à 13:05
Chaque langage a son propre vocabulaire. Il y a d'ailleurs certaines notions qui peuvent être appelées de la même manière dans deux langages différents mais qui ne signifient pas exactement la même chose pour autant.

Des vidéos tu en trouveras plein sur YouTube, y a juste à chercher :
https://www.youtube.com/results?search_query=tutoriel+java
Même si le mieux pour apprendre, c'est d'expérimenter et un tutoriel texte où tu pourras copier-coller du code sera bien plus pratique qu'une vidéo.

Tu peux regarder ce tutoriel par exemple : https://www.w3schools.com/java/
Chaque paragraphe aborde une notion, ce qui en fait un très bon "dictionnaire" pour le vocabulaire et sa définition.

Par exemple, le chapitre sur les classes internes explique comment faire une classe dans une autre.
Les différents codes proposés permettent notamment d'expérimenter la différence entre les classes internes static et les classes internes non static.
0