IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Réactualiser des conteneurs


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Par défaut Réactualiser des conteneurs
    Salut à tous,
    J'ai un petit programme qui affiche une image, une question et plusieurs possibilités de réponses (radio), ensuite on valide par un JButton, puis on passe à la questions suivante.

    JFrame-
    JPanel1 -- contient l'image
    JPanel2 -- contient la question et les boutons radios des séponses
    JPanel3 -- contient le JButton

    Mon problème viens lorsque l'on clique sur le bouton, l'actionListener fonctionne bien, mais je n'arrive pas à actualiser l'affichage.

    C'est une question très bêtes mais très gênante dont je n'ai pas trouvé la réponse sur Google

    Merci

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu fais quoi pour 'actualiser l'affichage' ?

  3. #3
    Membre averti
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Par défaut
    Justement je ne sais pas comment faire.
    Pour le moment ce que je fais (qui est tres moche je l'avoue) c'est que je detruit la fenetre et en reconstruit une nouvelle...

    Vous moquez pas du code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
     
    public class Frame extends JFrame{
    	private int width = 400; //dimensions image
    	private int height = 400;
     
    	private JFrame frame;
    	private JPanel panel1;
    	private JPanel panel2;
    	private JPanel panel3;
    	private Diapo diapo;
    	private Code code;
    	private ButtonGroup reponses;
     
    	private JRadioButton r1;
    	private JRadioButton r2;
    	private JRadioButton r3;
    	private JRadioButton r4;
     
    	public Frame (Diapo diapo, Code code){
    		this.code = code;
     
    		//fabrication de la fenetre
    		frame = new JFrame("Diapo n°"+diapo.getIndexQuest());
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		panel1 = new JPanel();
    		panel2 = new JPanel();
    		panel3 = new JPanel();
    		Container conteneur = frame.getContentPane();
    		conteneur.setLayout(new GridLayout(3,1));
     
    		//insertion image
    		panel1.setSize(width, height);
    		JLabel image = new JLabel(new ImageIcon(diapo.getImageAd()));
    		image.setSize(panel1.getWidth(),panel1.getHeight());
    		panel1.add(image);
    		panel1.repaint();
     
     
     
    		//insertion de la question et des composants de réponse
    		panel2.setSize(100, 2);
    		panel2.setBackground(Color.white);
    		final JLabel question = new JLabel(diapo.getQuestion());
    		panel2.add(question);
     
    		r1 = new JRadioButton("A - "+diapo.getRep(0));
    		r2 = new JRadioButton("B - "+diapo.getRep(1));
    		r3 = new JRadioButton("C - "+diapo.getRep(2));
    		r4 = new JRadioButton("D - "+diapo.getRep(3));
    		final JButton bSuivant = new JButton("Suivante");
    		reponses = new ButtonGroup();
    		reponses.add(r1);
    		reponses.add(r2);
    		reponses.add(r3);
    		reponses.add(r4);
     
    		panel2.add(r1);
    		panel2.add(r2);
    		panel2.add(r3);
    		panel2.add(r4);
    		panel3.add(bSuivant);
     
    		//Listener
    		Valider valide = new Valider(code, this);
    		bSuivant.addActionListener(valide);
     
    		//affichage
    		conteneur.add(panel1);
    		conteneur.add(panel2);
    		conteneur.add(panel3);
    		frame.pack();
    		frame.setVisible(true);
    	}
     
    	public int getReponse(){
    		if (r1.isSelected()) return 1;
    		else if (r2.isSelected()) return 2;
    		else if (r3.isSelected()) return 3;
    		else return 4;
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    import java.awt.event.*;
    
    public class Valider implements ActionListener{
    	
    	Code code;
    	Frame frame;
    	
    	public Valider(Code code, Frame frame) {
    		this.code = code;
    		this.frame = frame;
    	}
    	
    	public void actionPerformed(ActionEvent e){
    		code.suivant(frame.getReponse());
    		frame.dispose();
    		frame = new Frame(code.diapoActu(), code);
    	}
    	
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    public class Code {
     
    	private String fichier; // fichier contenant les questions/reponses
    	private int index;      // numéro de la question
    	private int nbQuestions; //nb de quetsions
    	private int note;       //nombre de questions justes
     
    	//pour la diapo
    	String question; //énoncé de la question
    	String[] rep;    //tableau de string contenant les réponses à la question
    	Integer solution;    //l'index de la bonne reéponse
    	String imageAd;  // adresse relative de l'image
     
     
    	public Code (String fichier) {
    		this.fichier = fichier;
    		this.index = 0;
    		Fichier f = new Fichier(fichier);
    		this.nbQuestions = Integer.parseInt(f.lireMarque("NB-", true));
    	}
     
    	//récupération info diapo
    	public void getInfoDiapo(Integer i){
    		Fichier f = new Fichier(fichier);
    		question = f.lireMarque(i+"QUE-", true);
    		imageAd = f.lireMarque(i+"IMG-", true);
    		solution = Integer.parseInt(f.lireMarque(i+"SOL-", true));
    		rep = new String[4];
    		for (Integer a=0 ; a<4 ; a++){
    			rep[a] = f.lireMarque(i+"REP"+a+"-", true);
    		}
    	}
     
    //passage de diapo	
    	public Diapo nouvelleDiapo(int i){
    		index = i;
    		getInfoDiapo(i);
    		return new Diapo(question, rep, imageAd, i);
    	}
    	public Diapo diapoSuivante() {
    		index++;
    		return nouvelleDiapo(index);
    	}
    	public Diapo diapoActu() {
    		return new Diapo(question, rep, imageAd, index);
    	}
     
    //récupération des résultats
    	public void correction(int reponse){
    		if (reponse == solution) {
    			note++;
    		}
    	}
    	public void suivant(int reponse){
    		correction(reponse);
    		if (index < nbQuestions) {
    			diapoSuivante();
    		}else {
    			System.out.println("Vous avez "+note+" bonnes réponses");
    			System.exit(0);
    		}
     
    	}
     
    }
    Je suis preneur pour toutes les remarques que vous aurez la patience de faire, désolé...

    Merci

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    alors t'as plusieurs possibilités:

    la plus basique consiste à supprimer les 2 panels du haut (frame.getContentPane().remove(panelASupprimer))
    une plus avancée consiste à vider panel1 et panel2 pour remettre du nouveau contenu
    une troisième consiste à juste changer l'imageicon utilisée pour le panel haut et le valeur des radio du panel bas.

    Dans tous les cas, après avoir manipulé des objets présents à l'écran, toujours appeler la méthode validate() du conteneur.

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Par défaut
    Merci bcp, j'ai utilisé la deuxième méthode qui va très bien.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser des conteneurs triés stl pour pointeurs, utile?
    Par Pacorabanix dans le forum SL & STL
    Réponses: 13
    Dernier message: 08/12/2007, 16h19
  2. [STL] insertion en bloc dans des conteneurs
    Par ZaaN dans le forum SL & STL
    Réponses: 1
    Dernier message: 28/06/2007, 15h38
  3. [STL] L'itérateur des méthodes "end()" des conteneurs
    Par Batoche dans le forum SL & STL
    Réponses: 4
    Dernier message: 16/04/2007, 16h06
  4. Réponses: 5
    Dernier message: 30/10/2006, 13h59
  5. Réponses: 8
    Dernier message: 16/06/2006, 00h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo