Question de débutant

cs_tweeder Messages postés 172 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 19 juin 2009 - 11 janv. 2005 à 00:12
toffe12 Messages postés 53 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 23 septembre 2005 - 11 janv. 2005 à 11:47
Bonjour, j'aimerais savoir pourquoi ma fenêtre ne se rafraichit pas
quand je click sur le bouton. Mon counter à beau s'incrémenter, c'est
toujours Étape 1: Le bouton qui s'affiche.

Voici mon code, pro du Java soyez indulgent, c'est mon premier programme en Java. Merci



import javax.swing.*;

import java.awt.*;

import java.awt.event.*;



public class tp1 extends JPanel {



JFrame frame;

JPanel haut;

JPanel main;

JPanel bas;

static int counter;



public tp1(JFrame frame) {



super(new BorderLayout());

this.frame = frame;



haut = ajout_haut();

main = ajout_main();

bas = ajout_bas();



add(haut, BorderLayout.NORTH);

add(main, BorderLayout.CENTER);

add(bas, BorderLayout.SOUTH);

}



private JPanel ajout_haut(){



//Création de mes panels

JPanel haut = new JPanel();

haut.setBackground(Color.WHITE);



//On affiche le texte selon l'étape

if(counter == 1){

//Le boutton

JLabel
titre = new JLabel("<html>Étape 1: Le
bouton

Pour utiliser...</html>",JLabel.LEFT);

haut.add(titre, BorderLayout.NORTH);

}

else if(counter == 2){

//Le tableau

JLabel
titre = new JLabel("<html>Étape 2: Le
tableau

Pour utiliser...</html>",JLabel.LEFT);


haut.add(titre, BorderLayout.NORTH);


}



return haut;

}



private JPanel ajout_main() {



//Création de mes panels

JPanel milieu = new JPanel();



//On affiche le texte selon l'étape

if(counter == 1){

//Le boutton

JButton button = new JButton("Cliquez ici pour continuer");

button.setActionCommand( "Continuez");

milieu.add(button, BorderLayout.NORTH);



button.addActionListener(new ActionListener() {


public void actionPerformed(ActionEvent e)
{


counter++;


new tp1(frame);



return;

}


});


}



return milieu;

}



private JPanel ajout_bas(){



bas = new JPanel();

JLabel etape = new JLabel("Étape "+counter+" / 6",JLabel.CENTER);



bas.add(etape, BorderLayout.NORTH);



return bas;

}



/**

* Create the GUI and show it. For thread safety,

* this method should be invoked from the

* event-dispatching thread.

*/

private static void createAndShowGUI() {

// Décorations pour la fenêtre

JFrame.setDefaultLookAndFeelDecorated(true);

JDialog.setDefaultLookAndFeelDecorated(true);



//Créer et configurer la fenêtre

JFrame frame = new JFrame("Exemples d'utilisations du Java");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



//Configurer le carré de la fenêtre

Container contentPane = frame.getContentPane();

contentPane.setLayout(new GridLayout(1,1));

contentPane.add(new tp1(frame));



//Display the window.

frame.pack();

frame.setVisible(true);

}



public static void main(String[] args) {

//Schedule a job for the event-dispatching thread:

//creating and showing this application's GUI.



//On met le compteur a 1

counter = 1;



javax.swing.SwingUtilities.invokeLater(new Runnable() {

public void run() {

createAndShowGUI();

}

});

}

}


Merci de votre aide


Jonathan

1 réponse

toffe12 Messages postés 53 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 23 septembre 2005 1
11 janv. 2005 à 11:47
Salut le probleme vient du code

button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
counter++;
new tp1(frame);
return;
}

tu recrees a chaque fois ton panel donc il prend par defaut les valeurs d'init, ecrit comme cela tu risques de faire exploser la memoire car a chaque appel du bouton tu recrees un IHM.
0
Rejoignez-nous