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

Agents de placement/Fenêtres Java Discussion :

[Debutant]: comment afficher une jframe d'une autre class


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Par défaut [Debutant]: comment afficher une jframe d'une autre class
    Bonjour à tous,

    voila, j'ai créé une class avec une jprogressBar.

    Lorsque je mets un main dedans pour la tester, ca fonctionner, ya par exemple afficher 10% avec une barre bleue (que c'est joli)
    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
     
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.Dimension;
     
    public class JProgressBarTest extends Frame implements ChangeListener
      {
      JProgressBar maBarre;
     
      public JProgressBarTest()
        {
     
        this.setLayout(new BorderLayout());
        this.maBarre = new JProgressBar(0,99);
        this.maBarre.setString("Progression");
        this.maBarre.setStringPainted(true);
        this.maBarre.addChangeListener(this);
        this.add("Center", maBarre);
        this.setBounds(320,240,250,100);
        this.setVisible(true);  
        }	
     
      /**
     * This method initializes this
     * 
     */
     
    public void stateChanged(ChangeEvent e)
        {
    	this.maBarre.setString ("Progession: " + (int)(maBarre.getPercentComplete()*100) + "%");
        }

    Mais lorsque je prends une class "normale" (sans jframe dedans, c'est une class qui permet de faire des calcul), et que je mets un appel à cette class:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    JProgressBarTest monTest = new JProgressBarTest();
    		    int pourcentage = 10;    
    		    monTest.maBarre.setValue(pourcentage);		 
    		    monTest.dispose();
    J'ai bien la jframe qui s'affiche, mais rien dedans!! Juste un rectangle blanc (la construction de la jframe je pense)

    D'où viens le probleme? Je m'y prends mal?

    D'avance merci

  2. #2
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Est ce que tu ajoute ta jprogressBar à ta JFrame? Normalement tu devrait avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nomdelaJframe.getContentPane().add(monTest);

  3. #3
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Citation Envoyé par Terminator
    Tu créés et ferme ton objet Progressbar immédiatement, je pense que c'est normal dans ce cas que tu n'obtiennes rien, car rien ne retient ta Frame de se fermer avant la fin de la progress bar.

    Tu devrais essayer de placer le dispose() dans la classe TaProgressbar au moment oú le traitement est terminé.

    PS: Il y a des choses pas belles du tout dans ta portion de code, par exemple il ne faut pas pouvoir accéder à un attribut d'une classe directement, il faut créer des accesseurs. Egalement il faut éviter de mélanger swing et AWT.

  4. #4
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Par défaut
    Merci pour vos reponses.

    Effectivmeent, comme vous l'avez constaté, j'ai enromement de mal

    Je ne comprends pas !
    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
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import javax.swing.JProgressBar;
    import java.awt.Rectangle;
     
    public class progress extends JFrame{
     
    	private JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="71,40"
    	private JPanel jContentPane = null;
    	private JProgressBar jProgressBar = null;
     
    	/**
             * This method initializes jFrame       
             *      
             * @return javax.swing.JFrame   
             */
    	public progress()
    	{
    		initialize();
    	}
    	   private void initialize() {
    		      this.setContentPane(getJContentPane());
    		      this.setSize(354, 80);
    	   }  
     
    	/**
             * This method initializes jContentPane 
             *      
             * @return javax.swing.JPanel   
             */
    	private JPanel getJContentPane() {
    		if (jContentPane == null) {
    			jContentPane = new JPanel();
    			jContentPane.setLayout(null);
    			jContentPane.add(getJProgressBar(), null);
    		}
    		return jContentPane;
    	}
     
    	/**
             * This method initializes jProgressBar 
             *      
             * @return javax.swing.JProgressBar     
             */
    	private JProgressBar getJProgressBar() {
    		if (jProgressBar == null) {
    			jProgressBar = new JProgressBar();
    			jProgressBar.setString("Progession: 0%");
    			jProgressBar.setName("Progression");
    			jProgressBar.setStringPainted(true);
    			jProgressBar.setBounds(new Rectangle(1, 6, 343, 47));
    			jProgressBar.addChangeListener(new javax.swing.event.ChangeListener() {
    				public void stateChanged(javax.swing.event.ChangeEvent e) {
    					System.out.println("stateChanged()"); // TODO Auto-generated Event stub stateChanged()
    					jProgressBar.setString("Progession: " + (int)(jProgressBar.getPercentComplete()*100) + "%");
    				}
    			});
    		}
    		return jProgressBar;
    	}
    	public static void progression(int valeur)
        {
    		progress chargement = new progress();
    		chargement.setVisible(true);		
    		chargement.jProgressBar.setValue(valeur);
    		chargement.dispose();
    		//chargement.jProgressBar.setValue(10);
        }
     
    	public static void main(String args[])
        {
    		progress chargement = new progress();
    		chargement.progression(10);
    		chargement.setVisible(true);
        }
     
     
    }
    Ca, c'est ma class avec la jprogress.

    Qd je test via le main, ca fonctionne tres bien, tout s'affiche et l'etat de la barre evolue

    Voici maintenant l'appel à partir d'une autre class (qui n'a pas de jframe):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    progress chargement = new progress();
    			chargement.progression(10);
    			chargement.setVisible(true);
    Là, y a bien une fenetre qui s'ouvre, mais rien n'est ecrit dedans, c'est blanc!!!

    D'où vient mon erreur?

    D'avance merci

  5. #5
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Primo : Conventions de nommage
    C'est très important de les respecter ça aide tout le monde (toi le premier ) à s'y retrouver

    Ensuite,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void initialize() {
    	this.setContentPane(getJContentPane());
    	this.setSize(354, 80);
    }
    Ça ne va pas du tout. Le content pane est le composant sur lequel tu dois ajouter les composants, mais tu ne dois pas le remplacer. Fais plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void initialize() {
    	this.getContentPane().add(getJContentPane());
    	this.setSize(354, 80);
    }
    Ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private JPanel getJContentPane() {
    	if (jContentPane == null) {
    		jContentPane = new JPanel();
    		jContentPane.setLayout(null);
    		jContentPane.add(getJProgressBar(), null);
    	}
    	return jContentPane;
    }
    Si tu spécifie le layout de ton jContentPane à null (jContentPane.setLayout(null)), il faut que tu spécifies la taille et l'emplacement du composant par un jContentPane.setBounds(x, y, width, height). Sinon il sera invisible !
    Cependant, il vaut mieux utiliser les gestionnaires de positionnement, donc au lieu de cette portion de code, mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private JPanel getJContentPane() {
    	if (jContentPane == null) {
    		jContentPane = new JPanel();
    		jContentPane.setLayout(new BorderLayout());
    		jContentPane.add(getJProgressBar(), "Center");
    	}
    	return jContentPane;
    }
    Bon après toutes ces corrections ça devrait déja aller un peu mieux.

    Cela dit que de complications ... poses toi les bonnes questions : quel est ton problème de base ? Afficher une JFrame construite à partir d'une autre classe. Je serais toi, j'essaierai déja juste de faire ça avant de me compliquer la vie avec des progressbar et des panels.

  6. #6
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Par défaut
    Merci pour la reponse et les details explicatifs

    Effectivement, la notation ne fut pas respectée

    Par contre, en ce qui concerne le code, c'est de l'eclipse en auto-generation.
    Notament le "this.setContentPane(getJContentPane());"

    J'ai remplacé comme cité le code, masi toujours le meme probleme

    Ca fonctionne lorsque je lance la class meme, mais dès que j'appelle cette class à partir d'une autre, je n'ai qu'un cadre blanc/gris sans rien dedans

    D'avance merci pour les prochains eclaircissmeents

  7. #7
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Si eclipse l'a auto-généré c'est que c'est correct alors, au temps pour moi.

    Un conseil : réduis ton code source au maximum afin d'avoir juste une "tentative" de classe appelant la frame d'une autre classe. Cette frame contiendra seulement un label "bonjour". Ensuite, si tu n'arrives toujours pas à faire ça, reviens poster ton code ici.

Discussions similaires

  1. [JFrame] Basculer une JFrame sur un autre écran
    Par rno38 dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 15/09/2009, 11h49
  2. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  3. Réponses: 11
    Dernier message: 14/10/2008, 10h21
  4. Comment afficher deux champs d'une table dans une comboBox
    Par lamia2007 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/04/2007, 08h17
  5. Réponses: 5
    Dernier message: 18/07/2006, 15h32

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