Rechercher : dans
Par :

[java] séquence fenetres

Dernière réponse le 11 oct 2007 à 00:26:16 ronchman07, le 2 oct 2007 à 23:28:28 
 Signaler ce message aux modérateurs

Bonjour,
j'ai un petit souci de programmation Java: je voudrais faire une séquence de trois fenetres qui s'enchainent, j'arrive à en faire deux mais pas trois...
Dans ma premeiere fenetre il y a (entre autre) un bouton sur lequel j'appuie, ce qui efface tous les objets de la fenetre et en affiche d'autres, en l'occurence d'autres boutons. Je voudrais, lorrsque j'appuie sur un de ces boutons, faire la même séquence: la fenetre se vide, puis affche d'autres objets; c'est là que je bloque.

Voici mon code:

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

public class Fenetre2 implements ActionListener{
//attributs
private JFrame fenetre;
private JButton boutonA;
private JLabel texte0, texte1, texte2;
private JTextField champA, champB;
private Dimension dimension;

//constructeur
public Fenetre2() {
this.fenetre=new JFrame("Bourse Willis");
this.texte0=new JLabel("Bienvenue sur Bourse Willis",SwingConstants.CENTER);
this.texte1=new JLabel("Veuillez renter votre numéro client:");
this.texte2=new JLabel("Mot de passe:");
this.champA=new JTextField(20);
this.champB=new JTextField(20);
this.dimension=new Dimension(100,100);
this.boutonA=new JButton("login");
Container conteneur = fenetre.getContentPane();
GridLayout disposition = new GridLayout(10,1);
conteneur.setLayout(disposition);

//on ajoute tout
conteneur.add(this.texte0);
texte0.setMinimumSize(dimension);
conteneur.add(this.texte1);
conteneur.add(this.champA);
conteneur.add(this.texte2);
conteneur.add(this.champB);
conteneur.add(this.boutonA);
boutonA.addActionListener(this);
this.fenetre.setBounds(20,40,300,300);
this.fenetre.setVisible(true);
}
//méthode
public void actionPerformed(ActionEvent e){
Container conteneur = fenetre.getContentPane();
//premier changement
if (e.getSource()==boutonA) {
//on enlève tout
conteneur.removeAll();
fenetre.repaint();
//on rajoute tout
JButton boutonB=new JButton("acheter");
conteneur.add(boutonB);
boutonB.addActionListener(this);
conteneur.validate();
fenetre.repaint();
//deuxieme changement
if(e.getSource()==boutonB){
System.out.println("ca marche?");
conteneur.removeAll();
fenetre.repaint();
//on rajoute tout
JButton boutonG=new JButton("choix entreprise");
conteneur.add(boutonG);
conteneur.validate();
fenetre.repaint();
}
}
}
}


En fait j'ai deux 'if' imbriqués l'un dans l'autre, le premier marche (le boutonB est créé), mais le deuxieme ne marche pas (le boutonB reste à l'écran,'ca marche?' ne s'affiche pas, le boutonG ne s'affiche pas).

Pouvez-vous m'aider svp?

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « [java] séquence fenetres » dans :
[Firefox] plugin Java Jre de Sun VoirA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes...
Télécharger Java Runtime Environment VoirJava Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des personnes dans le monde entier, de calculer les intérêts de votre prêt immobilier ou de visualiser des images en 3D. Ces...
Javascript - les boîtes de dialogue VoirQu'est-ce qu'une boîte de dialogue? Une boîte de dialogue est une fenêtre qui s'affiche au premier plan suite à un événement, et qui permet Soit d'avertir l'utilisateur Soit le confronter à un choix Soit lui demander de compléter un champ pour...
Java - Premier programme VoirPremière application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main...
Java - Les types de données VoirLes primitives Java est un langage orienté objet, c'est-à-dire que les éléments manipulés sont des classes, ou plus exactement des objets, c'est-à-dire des instances de classes. Toutefois ces objets contiennent des données possèdant un type (et...

1

ronchman07, le 9 oct 2007 à 20:26:18

Mias pourquoi personne ne répond?? Mon idée est stupide? Dites moi quelque chose s'il vous plaît je suis perdu!!!!

Répondre à ronchman07

2

kij_82, le 10 oct 2007 à 13:34:49

public void actionPerformed(ActionEvent e){
 Container conteneur = fenetre.getContentPane();
 //premier changement
 if (e.getSource()==boutonA) {
   //on enlève tout
   conteneur.removeAll();
   fenetre.repaint();
   //on rajoute tout
  JButton boutonB=new JButton("acheter");
  conteneur.add(boutonB);
  boutonB.addActionListener(this);
  conteneur.validate();
  fenetre.repaint();
  
  //deuxieme changement
  if(e.getSource()==boutonB){
     System.out.println("ca marche?");
     conteneur.removeAll();
     fenetre.repaint();
     //on rajoute tout
     JButton boutonG=new JButton("choix entreprise");
      conteneur.add(boutonG);
      conteneur.validate();
      fenetre.repaint();
   }
 }
} 


Voilà une présentation plus lisible de ta méthode (actionPerformed), Il me semble que ta méthode est mal implémentée. En effet, si la source de l'action est le bouton A, tu exécute ce bout de code là en entier :

//on enlève tout
   conteneur.removeAll();
   fenetre.repaint();
   //on rajoute tout
  JButton boutonB=new JButton("acheter");
  conteneur.add(boutonB);
  boutonB.addActionListener(this);
  conteneur.validate();
  fenetre.repaint();
  
  //deuxieme changement
  if(e.getSource()==boutonB){
     System.out.println("ca marche?");
     conteneur.removeAll();
     fenetre.repaint();
     //on rajoute tout
     JButton boutonG=new JButton("choix entreprise");
      conteneur.add(boutonG);
      conteneur.validate();
      fenetre.repaint();
   }


Par contre si la source de l'action est le bouton B, tu ne passe pas le premier test, donc ne fais pas le second.
Pour corriger cela, il te suffit de sortir correctement ton deuxième test de la facon suivante :

public void actionPerformed(ActionEvent e){
 Container conteneur = fenetre.getContentPane();
 //premier changement
 if (e.getSource()==boutonA) {
   //on enlève tout
   conteneur.removeAll();
   fenetre.repaint();
   //on rajoute tout
  JButton boutonB=new JButton("acheter");
  conteneur.add(boutonB);
  boutonB.addActionListener(this);
  conteneur.validate();
  fenetre.repaint();
 }

  //deuxieme changement
 else if(e.getSource()==boutonB){
     System.out.println("ca marche?");
     conteneur.removeAll();
     fenetre.repaint();
     //on rajoute tout
     JButton boutonG=new JButton("choix entreprise");
      conteneur.add(boutonG);
      conteneur.validate();
      fenetre.repaint();
   }

} 


Ca fonctionnera déjà mieux je pense, mais il est possible que cela ne résoud pas totalement ton problème (le programme est mal construit selon moi), à voir...
Bon courage.
~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

3

ronchman07, le 10 oct 2007 à 20:13:34

Merci beaucoup pour ta réponse, oui je pense effectivement que mon code est mal conçu, mais je desespoérais que quelqu un me réponde un jour... J'ai essayé ton code pour la méthode actionPerformed, ça ne marche toujours pas, en même temps vu que le boutonB est créé dans le premier test, ca m'etonnait qu'on puisse faire un test portant sur ce boutonB hors du premier test (j'espere que c'est compréhensible ce que je raconte), c'est pour cela que j'avais imbriqué les deux tests l'un dans l'autre...
Je vais essayer de totalement revoir mon programme avec différentes fenetres et des setVisible(true) ou setVisible(false)... Je n'ai pas dit mon dernier mot, merci pour ta réponse!

Répondre à ronchman07

4

 ronchman07, le 11 oct 2007 à 00:26:16

J'ai résolu mon problème de la façon que j'expliquais au dessus, si ça interesse quelqu'un voilà des bouts de code (mon programme ne ressemble plus à celui du premier post):
-1ere classe fenetre1:
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class Fen1{
//attributs
private JFrame fenetre;
private JButton boutonA,boutonB;
private JLabel texte0, texte1, texte2;
private JTextField champA, champB;
private Dimension dimension;
//constructeur
public Fen1() {
this.fenetre=new JFrame("Bourse Willis");
this.texte0=new JLabel("Bienvenue sur Bourse Willis",SwingConstants.CENTER);
this.texte1=new JLabel("Veuillez renter votre numéro client:");
this.texte2=new JLabel("Mot de passe:");
this.champA=new JTextField(20);
this.champB=new JTextField(20);
this.dimension=new Dimension(100,100);
this.boutonA=new JButton("login");
Container conteneur = fenetre.getContentPane();
/*FlowLayout*/GridLayout disposition = new /*FlowLayout() */GridLayout(10,1);
/*disposition.setAlignment(FlowLayout.CENTER);
JPanel boutons=new JPanel();
FlowLayout dispositionBoutons=new FlowLayout();
boutons.setLayout (dispositionBoutons);*/
conteneur.setLayout(disposition);
//on ajoute tout
conteneur.add(this.texte0);
texte0./*reshape(20,20,20,20)*/setMinimumSize(dimension);
conteneur.add(this.texte1);
conteneur.add(this.champA);
conteneur.add(this.texte2);
conteneur.add(this.champB);
conteneur.add(this.boutonA);
this.fenetre./*pack()*/setBounds(20,40,300,300);
}
//getteurs
public JButton getBoutonA (){
return boutonA;
}
//méthode
public void setVisible(boolean b){
if (b) { this.fenetre.setVisible(true);
}
else { this.fenetre.setVisible(false);
}
}
}

ensuite je crée les autres fenetres de la meme facon, puis la classe fenetres:
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class Fenetres implements ActionListener {
//attributs
Fen1 fen1;
Fen2 fen2;
Fen31 fen31;
Fen32 fen32;
//constructeur
public Fenetres(){
this.fen1=new Fen1();
fen1.setVisible(true);
fen1.getBoutonA().addActionListener(this);
this.fen2=new Fen2();
fen2.getBoutonA().addActionListener(this);
fen2.getBoutonB().addActionListener(this);
}
//méthode
public void actionPerformed(ActionEvent e){
if (e.getSource()==fen1.getBoutonA()) {
//on cache la première fenêtre
fen1.setVisible(false);
//on montre la deuxième
fen2.setVisible(true);
}
if (e.getSource()==fen2.getBoutonA()) {
//on cache la deuxième fenêtre
fen2.setVisible(false);
//on montre la troisième
fen31=new Fen31();
fen31.setVisible(true);
}
if (e.getSource()==fen2.getBoutonB()) {
//on cache la deuxième fenêtre
fen2.setVisible(false);
//on montre la troisième
fen32=new Fen32();
fen32.setVisible(true);
}
}
}

Et là magie, ca fonctionne, je peux enchainer autant de fenetres que je veux.
Merci pour l'aide!

Répondre à ronchman07