Creation d'interface graphique en java [Résolu]

Messages postés
19
Date d'inscription
jeudi 20 juillet 2006
Statut
Membre
Dernière intervention
3 septembre 2006
- - Dernière réponse : melianos31
Messages postés
19
Date d'inscription
jeudi 20 juillet 2006
Statut
Membre
Dernière intervention
3 septembre 2006
- 24 juil. 2006 à 09:13
Bonjour.

Je développe en ce moment une interface graphique en java ( merci le tuto de tucobouch ), mais j'ai un petit probleme.

Si je met tout dans la classe Fenetre, et que mon main se contente de creer une Fenetre, tout va bien, affichage de la fenetre a l'écran, avec mes bontons, mes scrolls, etc...

Si je tente de mettre les differents Panel dans des classes differentes (car j'ai des Panels qui se répètent), et pour faciliter la relecture, ma classe fenetre veux bien ajouter toutes mes classes dans la fenetre, mais ceux-ci ne s'affiche pas à l'écran.
Avant tous les fichiers étaient dans le même package, mais ca ne marchait quand même pas.

Quelle est mon erreur ?
Je programme sous windows, avec eclipse 3.2, sans le VE (J'arrive pas a m'en servir :p )

classe TafelVisual, avec le main
////////////////////////////////////////////////////////////////////////////////
package main_window;
import javax.swing.JFrame;

import tafelComponents.*;

public class TafelVisual extends JFrame{

   
    private static final long serialVersionUID = 1L;

    public static void main(String[] args)
        {
            Fenetre fen = new Fenetre();
            StoffMenu menu1 = new StoffMenu();
            VariablenMenu menu2 = new VariablenMenu("Erste bekannte Variable");
            VariablenMenu menu3 = new VariablenMenu("Zweite bekannte Variable");
            EinorParButton menu4 = new EinorParButton();
           
           
           
            fen.setContentPane(menu1);
            fen.add(menu2);
            fen.add(menu3);
            fen.add(menu4);
            fen.setVisible(true);
        }

}

classe Fenetre
/////////////////////////////////////////////////////////////////////////////////////////////
package tafelComponents;

import javax.swing.*;

public class Fenetre extends JFrame {
    public StoffMenu menu1 = new StoffMenu();
   
    private static final long serialVersionUID = 1L;

    public Fenetre()
    {
        super("Interface für fluidp");
        this.setSize(300, 200);
       
        JPanel mainPanel=new JPanel();
        BoxLayout bl1 = new BoxLayout(mainPanel,BoxLayout.Y_AXIS);
        mainPanel.setLayout(bl1);
        this.add(menu1);
    }
  
   
}

classe VariablenMenu, un des Panels que je cherche à ajouter
///////////////////////////////////////////////////////////////
package tafelComponents;

import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class VariablenMenu extends JPanel{
    // This Panel allows you to say what fields you already know
    private static final long serialVersionUID = 1L;

    public VariablenMenu(String s){
        JPanel pan = new JPanel();
        BoxLayout bl = new BoxLayout(pan,BoxLayout.X_AXIS);
        pan.setLayout(bl);
       
        JLabel lab3 = new JLabel(s);
        pan.add(lab3);
        String c[] ={"Druck(in bar)","Temperatur(in K)","RHO( in ??)"};
        JComboBox cb = new JComboBox(c);
        pan.add(cb);
        pan.setVisible(true);
       
        JTextField tf = new JTextField();
        pan.add(tf);
       
    }

}
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
82
3
Merci
public class EinorParButton extends JPanel{

   

    private static final long serialVersionUID = 1L;

    JPanel pan = new JPanel();

    BoxLayout bl = new BoxLayout(pan,BoxLayout.X_AXIS);

    ButtonGroup group = new ButtonGroup();   

    JRadioButton b1 = new JRadioButton("Einzelwert",true);

    JRadioButton b2 = new JRadioButton("Parameterfeld",false);

  

    public EinorParButton(){

        pan.setLayout(bl);

        group.add(b1);

        pan.add(b1);

        group.add(b2);

        pan.add(b2);

        this.add(pan);

    }

}


"EinorParButton ne s'affiche pas, VariablenMenu plante le tout"

comment ca il plante le tout???


pour en ajouter plein tu fais


public class Fenetre extends JFrame{

    private static final long    serialVersionUID    = 7979400413333400347L;

    EinorParButton epb1 = new EinorParButton();

    EinorParButton epb2 = new EinorParButton();

    EinorParButton epb3 = new EinorParButton();

    EinorParButton epb4 = new EinorParButton();

    EinorParButton epb5 = new EinorParButton();

    JPanel pan = new JPanel();

   

    public Fenetre() {

        super("Interface für fluidp");

        this.setSize(400, 200);

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

       

        BoxLayout bl2 = new BoxLayout(pan,BoxLayout.Y_AXIS);

        pan.setLayout(bl2);

       

        pan.add(new StoffMenu());

        pan.add(epb1);
        pan.add(epb2);
        pan.add(epb3);
        pan.add(epb4);
        pan.add(epb5);


        BorderLayout bl = new BorderLayout();

       

        getContentPane().setLayout(bl);

        getContentPane().add(pan);      

    }

}


tsé le mieux avant d'essayer de faire une interface graphique avec tout
plein de composants dans tout les sens c'est de déja bien maitriser
ceux-ci et egalements de bien maistriser les notions de conteneur...
mais bon

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 136 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Twinuts
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
82
0
Merci
Salut,


c'est pas la réponse mais public class TafelVisual extends JFrame{
c'est pas utile fais simplement public class TafelVisual{ vu que dans
le main tu utilise une autre fenetre.


je ne pourrait te dire si il y a une erreur dans StoffMenu vu que l'on a pas le code.

pour VariablenMenu tu as oublié de rattacher ton panel à l'autre soit


    public VariablenMenu(String s){

        JPanel pan = new JPanel();

        BoxLayout bl = new BoxLayout(pan,BoxLayout.X_AXIS);

        pan.setLayout(bl);

       

        JLabel lab3 = new JLabel(s);

        pan.add(lab3);

        String c[] ={"Druck(in bar)","Temperatur(in K)","RHO( in ??)"};

        JComboBox cb = new JComboBox(c);

        pan.add(cb);

        pan.setVisible(true);

       

        JTextField tf = new JTextField();

        pan.add(tf);

        this.add(pan);

       

    }


perso je te conseil plutot de faire


    public VariablenMenu(String s){

        BoxLayout bl = new BoxLayout(pan,BoxLayout.X_AXIS);

        this.setLayout(bl);

       

        JLabel lab3 = new JLabel(s);

        this.add(lab3);

        String c[] ={"Druck(in bar)","Temperatur(in K)","RHO( in ??)"};

        JComboBox cb = new JComboBox(c);

        this.add(cb);      

        JTextField tf = new JTextField();

        this.add(tf);

    }

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Commenter la réponse de Twinuts
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
82
0
Merci
Perso je te conseil de sortir tes variables des constructeurs sourtout
si dans le future tu as l'intention de les modifiers par le bia d'une
autre classe

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Commenter la réponse de Twinuts
Messages postés
19
Date d'inscription
jeudi 20 juillet 2006
Statut
Membre
Dernière intervention
3 septembre 2006
0
Merci
Ca ne resoud pas le probleme, mais ca me permet d'écrire un code plus lisible, et vu que je devrais les modifier apres, merci pour l'info.

Apres remaniement, voila mon code ( a nouveau )
Les trois classes sont dans trois fichiers différents, et dans le même paquetage.

petite différence depuis ce matin :
apres de nombreuses manip, maintenant j'obtiens une fenetre vide, sans titre :'(

class TafelVisual
/////////////////////////////////////////////////////////////////////////////////////

package main_window;
import javax.swing.JFrame;

public class TafelVisual extends JFrame{

    private static final long serialVersionUID = 1L;

    public static void main(String[] args)
        {
            Fenetre fen = new Fenetre();
            fen.setVisible(true);
        }
}

class Fenetre
//////////////////////////////////////////////////////////////////////////////////////
package main_window;

import javax.swing.*;

public class Fenetre extends JFrame{
   
    private static final long serialVersionUID = 1L;
   
    public Fenetre()
    {
        super("Interface für fluidp");
        this.setSize(400, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
   
}

class StoffMenu
//////////////////////////////////////////////////////////////////////////////////////
package main_window;

import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JLabel;

public class StoffMenu extends JPanel{
   
    private static final long serialVersionUID = 1L;
   
    JPanel pan = new JPanel();
    BoxLayout bl = new BoxLayout(pan,BoxLayout.X_AXIS);
    JLabel lab = new JLabel("Gas studiert :");
    String c[] = {"H2","O2","N2","H2O","CH4"};
    JComboBox cb = new JComboBox(c);

    public StoffMenu(){
   
        pan.setLayout(bl);       
        pan.add(lab);
        pan.add(cb);
       
        this.setVisible(true);
        this.add(pan);
            
    }
   
}
Commenter la réponse de melianos31
Messages postés
19
Date d'inscription
jeudi 20 juillet 2006
Statut
Membre
Dernière intervention
3 septembre 2006
0
Merci
oups, j'avais oublie d'ajouter le StoffMenu, mais ca n'a rien change ( je le rajoute dans le constructeur de Fenetre)
Commenter la réponse de melianos31
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
82
0
Merci
Oki donc voici le code j'ai mis 2-3 commentaires


package main_window;


public class TafelVisual {

    public static void main(String[] args)

    {

        //pas utile pour juste afficher la fenetre

        //Fenetre fen = new Fenetre();

        //fen.setVisible(true);

        new Fenetre().setVisible(true);

    }

}


------------------------------------------------------------


package main_window;


import javax.swing.JFrame;


public class Fenetre extends JFrame{

    private static final long    serialVersionUID    = 7979400413333400347L;


    public Fenetre() {

        super("Interface für fluidp");

        this.setSize(400, 200);

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        //si tu n'ajoute jamais les composant a la fenetre ils ne le feront pas

        //a ta place :D

        setContentPane(new StoffMenu());//si tu ne desire qu'un composant maitre

        //sinon utilise add et met un joli layout par defaut contrairement aux jpanel

        //qui ont un layout en FlowLayout les jframe c'est BorderLoyout

        //add(new StoffMenu(), java.awt.BorderLayout.CENTER);

    }

}


------------------------------------------------------------


package main_window;


import javax.swing.BoxLayout;

import javax.swing.JComboBox;

import javax.swing.JLabel;

import javax.swing.JPanel;


public class StoffMenu extends JPanel{

  

    private static final long serialVersionUID = 1L;

  

    //JPanel pan = new JPanel();

    //BoxLayout bl = new BoxLayout(pan,BoxLayout.X_AXIS);

    BoxLayout bl = new BoxLayout(this,BoxLayout.X_AXIS);

    JLabel lab = new JLabel("Gas studiert :");

    String c[] = {"H2","O2","N2","H2O","CH4"};

    JComboBox cb = new JComboBox(c);


    public StoffMenu(){

        //pas utile oublie pas que tu es deja dans un JPanel

        //pan.setLayout(bl);      

       // pan.add(lab);

        //pan.add(cb);

        //this.add(pan);

        //this.setVisible(true);//pas utile

        setLayout(bl);      

        add(lab);

        add(cb);

    }

  

}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Commenter la réponse de Twinuts
Messages postés
19
Date d'inscription
jeudi 20 juillet 2006
Statut
Membre
Dernière intervention
3 septembre 2006
0
Merci
Bon, ca résoud la plupart de mes problèmes, sauf un.

je cherche a mettre des menu, (comme StoffMenu) les uns en dessous des autres, (c'est pas plus facile avec un JPanel ? )
et je n'arrive pas à mettre le layout avec BorderLayout.

        BorderLayout bl = new BorderLayout(); // ca fonctionne

        this.setLayout(bl); // la ca plante
ou
       add(new StoffMenu(), java.awt.BorderLayout.CENTER);
// qui plante aussi

(Désolé si ca te semble être me macher le boulot, je galère dessus depuis ce matin)
Commenter la réponse de melianos31
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
82
0
Merci
tu tourne avec quel jdk 1.4 ou 1.5


si tu es avec le jdk 1.5 cela devrai fonctionner sinon il te faut passer par le contentpane


getContentPane().setLayout(bl);

getContentPane().add(new StoffMenu(), java.awt.BorderLayout.CENTER);


"je cherche a mettre des menu"

des menu comme Fichier, Edition, etc... ? si oui passe par un JMenu et pour le ratacher a une JFrame tu fais setJMenu(monJmenu);


"Désolé si ca te semble être me macher le boulot, je galère dessus depuis ce matin"

c'est rien va :D

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Commenter la réponse de Twinuts
Messages postés
19
Date d'inscription
jeudi 20 juillet 2006
Statut
Membre
Dernière intervention
3 septembre 2006
0
Merci
Bon, ca fonctionne tant que j'ajoute StoffMenu, (je passe par un JPanel pour mettre plusieurs StoffMenu),
mais quand je tente d'ajouter un EinorParButton, ou un VariablenMenu au JPanel, c'est plus ca (EinorParButton ne s'affiche pas, VariablenMenu plante le tout).
Donc, comment puis-je rajouter un grand nombre de ces Menus sans que ca plante ? ( il m'en faut 5 ou 6, dont 4 differents)

class Fenetre
//////////////////////////////////////////////////////////
public class Fenetre extends JFrame{
    private static final long    serialVersionUID    = 7979400413333400347L;
    JPanel pan = new JPanel();
   
    public Fenetre() {
        super("Interface für fluidp");
        this.setSize(400, 200);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
       
        BoxLayout bl2 = new BoxLayout(pan,BoxLayout.Y_AXIS);
        pan.setLayout(bl2);
       
        pan.add(new StoffMenu());
       
        BorderLayout bl = new BorderLayout();
       
        getContentPane().setLayout(bl);
        getContentPane().add(pan);      
    }
}

class EinorParButton
//////////////////////////////////////////////////
public class EinorParButton extends JPanel{
   
    private static final long serialVersionUID = 1L;
    JPanel pan = new JPanel();
    BoxLayout bl = new BoxLayout(pan,BoxLayout.X_AXIS);
    ButtonGroup group = new ButtonGroup();   
    JRadioButton b1 = new JRadioButton("Einzelwert",true);
    JRadioButton b2 = new JRadioButton("Parameterfeld",false);
  
    public EinorParButton(){
        pan.setLayout(bl);
        group.add(b1);
        pan.add(b1);
        group.add(b2);
        pan.add(b2);
    }
}

class VariablenMenu
////////////////////////////////////////////////////////////7
public class VariablenMenu extends JPanel{
    private static final long serialVersionUID = 1L;
    JPanel pan = new JPanel();
    public VariablenMenu(String s){
        BoxLayout bl = new BoxLayout(pan,BoxLayout.X_AXIS);
        this.setLayout(bl);
      
        JLabel lab3 = new JLabel(s);
        this.add(lab3);
        String c[] ={"Druck(in bar)","Temperatur(in K)","RHO( in ??)"};
        JComboBox cb = new JComboBox(c);
        this.add(cb);     
        JTextField tf = new JTextField();
        this.add(tf);
    }
}
Commenter la réponse de melianos31
Messages postés
19
Date d'inscription
jeudi 20 juillet 2006
Statut
Membre
Dernière intervention
3 septembre 2006
0
Merci
Ca y est, j'ai trouve l'erreur cachée

JPanel pan = new JPanel();
    public VariablenMenu(String s){
        BoxLayout bl = new BoxLayout(pan,BoxLayout.X_AXIS);
        this.setLayout(bl);

je cree un JPanel, sauf que j'utilisais le BoxLayout pour un autre (this et pan sont deux JPanel differents)

je peux enfin continuer.

Merci pour l'aide !
Commenter la réponse de melianos31