Applet, swing class et constructeur.

nonoz Messages postés 57 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 23 juin 2004 - 17 mai 2004 à 16:47
nonoz Messages postés 57 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 23 juin 2004 - 18 mai 2004 à 21:29
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

fabulou Messages postés 12 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 4 août 2007
17 mai 2004 à 17:03
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 ;)
0
nonoz Messages postés 57 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 23 juin 2004
17 mai 2004 à 17:14
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);
0
fabulou Messages postés 12 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 4 août 2007
17 mai 2004 à 19:20
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 ;)
0
nonoz Messages postés 57 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 23 juin 2004
17 mai 2004 à 20:09
Fabulou un grand merci. :)
j'enviendrais presque a aimer java... :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nonoz Messages postés 57 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 23 juin 2004
18 mai 2004 à 14:58
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.
0
fabulou Messages postés 12 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 4 août 2007
18 mai 2004 à 21:06
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 ;)
0
nonoz Messages postés 57 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 23 juin 2004
18 mai 2004 à 21:29
a okay donc faut que je mette des b majuscule partout... :-p
bon faut que j'essaye avce les boutons
0
Rejoignez-nous