Applet, swing class et constructeur.

Signaler
Messages postés
57
Date d'inscription
mercredi 29 janvier 2003
Statut
Membre
Dernière intervention
23 juin 2004
-
nonoz
Messages postés
57
Date d'inscription
mercredi 29 janvier 2003
Statut
Membre
Dernière intervention
23 juin 2004
-
bonjour,
j'aurais besoin d'un peu d'aide parce que je comprends pas bien ce qu'il faut que je fasse (enfin si faire un constructeur mais ou et comment????)

donc voila j'ai une applet qui appel une classe qui doit afficher des boutons le probleme c'est qu'il me dit ca:

"Applet1.java" : Erreur No. 300 : constructeur boutons(calc.Applet1) introuvable dans classe calc.boutons en ligne 56, colonne 31

pourquoi?

mon code:

// mon applet
package calc;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;

public class Applet1 extends Applet {

private double nb1= 0.0;
private double nb2=0.0;
private char op='=';
int virgule=0;
JLabel resultat=null;

boolean isStandalone = false;
JPanel fondcalc = new JPanel();
GridBagLayout gridBagLayout1 = new GridBagLayout();
JLabel jLabel1 = new JLabel();
/**Obtenir une valeur de paramètre*/
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}

/**Construire l'applet*/
public Applet1() {
}
/**Initialiser l'applet*/
public void init() {

try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**Initialiser le composant*/
private void jbInit() throws Exception {
fondcalc.setLayout(gridBagLayout1);
jLabel1.setText("zone d'ecriture");

//la ca plante
boutons mazoneboutons =new boutons(this);

this.add(fondcalc, null);
this.add(jLabel1, null);
this.add(mazoneboutons, null);

}
/**Obtenir les informations d'applet*/
public String getAppletInfo() {
return "Information applet";
}
/**Obtenir les informations de paramètre*/
public String[][] getParameterInfo() {
return null;
}
}

//------------------------------------------------------------
//ma classe
package calc;

import java.awt.* ;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;

public class boutons {
JPanel zonebouton = new JPanel();
GridBagLayout gridBagLayout1 = new GridBagLayout();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();

public boutons() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}

}
private void jbInit() throws Exception {
jButton1.setText("jButton1");
zonebouton.setLayout(gridBagLayout1);
jButton2.setText("jButton2");
zonebouton.add(jButton1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
zonebouton.add(jButton2, new GridBagConstraints(1, 0, 1, 2, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
}
}

merci d'avance.

%-6 Je comprends rien a java %-6

7 réponses

Messages postés
12
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
4 août 2007

Salut.
Dans ton applet tu construits un "boutons" avec comme parametre ton applet (le this). Alors que le constructeur de "boutons" il n'y a aucun parametre !

Tu peux remplacer ta ligne :
boutons mazoneboutons=new boutons(this);

par :
boutons mazoneboutons=new boutons();

Fabulou ;)
Messages postés
57
Date d'inscription
mercredi 29 janvier 2003
Statut
Membre
Dernière intervention
23 juin 2004

ben oui mais ca marche pas j'ai toujours un message d'errreur???? qui a priori ne provient pas de la meme chose mais bon???

"Applet1.java" : Erreur No. 300 : méthode add(calc.boutons, null) introuvable dans classe calc.Applet1 en ligne 51, colonne 10

//la ligne qui deconne
this.add(mazoneboutons, null);
Messages postés
12
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
4 août 2007

Alors, il y a en effet plusieurs choses à changer.

Tout d'abord dans ta classe Applet1, je pense que tu n'es pas obligés de mettre le null dans les fonctions add().

Ensuite, la fonction add() prend comme parametre un Objet Component. Dans ton cas tu passes une classe "boutons" qui n'est pas un Component. Il faut donc que cette classe devienne un Component, pour cela elle doit herité de par exemple un JPanel,.

Ce qui faitque ta classe "boutons" devient :

import java.awt.* ;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;

public class boutons extends JPanel{

GridBagLayout gridBagLayout1 = new GridBagLayout();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();

public Boutons() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}

private void jbInit() throws Exception {
jButton1.setText("jButton1");
this.setLayout(gridBagLayout1);
jButton2.setText("jButton2");
this.add(jButton1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
this.add(jButton2, new GridBagConstraints(1, 0, 1, 2, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
}
}


woila, ca devrai marcher !

Fabulou ;)
Messages postés
57
Date d'inscription
mercredi 29 janvier 2003
Statut
Membre
Dernière intervention
23 juin 2004

Fabulou un grand merci. :)
j'enviendrais presque a aimer java... :)
Messages postés
57
Date d'inscription
mercredi 29 janvier 2003
Statut
Membre
Dernière intervention
23 juin 2004

bon donc voila jusque la ca marche, il y avait juste une petite erreur dans la classe que tu m'as fourni c'est qu'il fallait mettre un b a la place de B dans 'public boutons() {'
mais bon vu le debuggage que tu m'as fait la je suis tout content parce que ca marche.

du coup j'essaye de compliquer un peu le prog en ajouter un listener sur mes boutons qu'il lorsque l'on clique dessus appelera une fonction dans la classe principale.

du coup mon prog principale ressemble a ca:

package calc;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;

public class Applet1 extends Applet {

boolean isStandalone = false;
JPanel fondcalc = new JPanel();
GridBagLayout gridBagLayout1 = new GridBagLayout();
JLabel jLabel1 = new JLabel();
/**Obtenir une valeur de paramètre*/
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}

/**Construire l'applet*/
public Applet1() {
}
/**Initialiser l'applet*/
public void init() {

try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**Initialiser le composant*/
private void jbInit() throws Exception {
fondcalc.setLayout(gridBagLayout1);
jLabel1.setText("zone d'ecriture");

boutons mazoneboutons=new boutons(this);

this.add(fondcalc, null);
this.add(jLabel1, null);
this.add(mazoneboutons, null);

}
/**Obtenir les informations d'applet*/
public String getAppletInfo() {
return "Information applet";
}
/**Obtenir les informations de paramètre*/
public String[][] getParameterInfo() {
return null;
}

/** Affichage du résultat */
public void resultat()
{
jLabel1.setText("ca marche");
}
}

//--------------------------------------------------------
//-------------------------------------------------------

//et ma classe a ca:
package calc;

// je recuepere tous les import dont j'ai besoin
import java.awt.* ;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;

public class boutons extends JPanel implements ActionListener{

// création des éléments et du layout
GridBagLayout gridBagLayout1 = new GridBagLayout();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();

//je declare une variable dans lequel je vais mettre mon applet.
private Applet1 c;

//erreur ici
jButton1.addActionListener(this);

public boutons (Applet1 c) {
this.c =c;
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}

private void jbInit() throws Exception {
//je mets tout l'affichage en place.

this.setLayout(gridBagLayout1);
//je donne un nom a mes boutons
jButton1.setText("1");
jButton2.setText("2");

// positionnement des éléments dans le GridbagLayout
this.add(jButton1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
this.add(jButton2, new GridBagConstraints(1, 0, 1, 2, 0.0, 0.0
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
}

/** gestion des événements */
public void actionPerformed (ActionEvent e)
{
//j'appele resultat qui se trouve dans l'applet
c.resultat();
}

}

//je me retrouve avec ca comme erreur:
"boutons.java" : Erreur No. 215 : déclaration de méthode incorrecte ; type retourné nécessaire en ligne 26, colonne 27
"boutons.java" : Erreur No. 203 : début de type incorrect en ligne 26, colonne 28

et ce que c'est mon action listener que je mets pas au bon endroit? si je mets :'jButton1.addActionListener(this);' en commentaire le prog fonctionne et si je rajoute c.resultat(); dans le init de la classe boutons mon label est bien modifie... mais je ne peux avoir aucune action lorsque je clique sur les boutons... :sad)

ps: j'ai laisse null dans la fonction add car cela ne semble pas avoir d'impact.
Messages postés
12
Date d'inscription
lundi 15 mars 2004
Statut
Membre
Dernière intervention
4 août 2007

Salut,

Ca marche pas parceque tu ne peut pas utiliser cette fonction a cette endroit. Je veux dire par la que tu dois mettre ta ligne :
jButton1.addActionListener(this);

dans la fonction jbInit() par exemple.

Pour ce qui est de ma classe Boutons, j'ai mis un b majuscule, car en java un nom de classe commence toujours par une majuscule ( c'est la norme fait par sun ) !

woila

Fabulou ;)
Messages postés
57
Date d'inscription
mercredi 29 janvier 2003
Statut
Membre
Dernière intervention
23 juin 2004

a okay donc faut que je mette des b majuscule partout... :-p
bon faut que j'essaye avce les boutons