Partage
  • Partager sur Facebook
  • Partager sur Twitter

Interface IHM

Placement des componants

    17 janvier 2011 à 11:33:26

    Salut tout le monde,

    Je me perds un peu dans le placement de mes composants dans mes JPanel. En effet, les lignes 75 à 77 ne prennent effet que si j'initialise leur JPanels respectifs en tant que JPanel d'accueil ligne 105.

    Voici les sources :

    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.*; 
    
    public class Fenetre extends JFrame{
    
    	/**
    	 * 
    	 */
    		
    	private static final long serialVersionUID = 1L;
    	
    	public JPanel panAccueil = new JPanel();
    	public JPanel panInstal = new JPanel();
    	public JPanel panPreferences = new JPanel();
    	public JPanel panConfig = new JPanel();
    	
    	public JButton installation = new JButton("Installation");
    	public JButton preferences = new JButton("Préférences");
    	public JButton configuration = new JButton("Configuration");
    	public JButton precedentInstal = new JButton("Précédent");
    	public JButton precedentPref = new JButton("Précédent");
    	public JButton precedentConf = new JButton("Précédent");
    	
    	public JLabel enteteAccueil = new JLabel("Entete ici");
    	public JLabel enteteInstal = new JLabel("Entete Installation");
    	public JLabel entetePref = new JLabel("Entete Préférences");
    	public JLabel enteteConf = new JLabel("Entete Configuration");
    	public JLabel texteInstallation = new JLabel("Installation de votre logiciel");
    	public JLabel textePref = new JLabel("Choisissez vos préférences");
    	public JLabel texteConfig = new JLabel("Configurer votre logiciel");
    	
    //	public JLabel imageInst = new JLabel(new ImageIcon("C:\\Users\\Pierre\\workspace\\Menu\\Installation.jpg"));
    //	public JLabel imagePref = new JLabel(new ImageIcon("C:\\Users\\Pierre\\workspace\\Menu\\Préférences.jpg"));
    //	public JLabel imageConf = new JLabel(new ImageIcon("C:\\Users\\Pierre\\workspace\\Menu\\Installation.png"));
    
    	public Fenetre(){
    		init_param_fenetre();
    		setLayout(null);
    		
    		panAccueil.setBackground(Color.WHITE);
    		panInstal.setBackground(Color.WHITE);
    		panPreferences.setBackground(Color.WHITE);
    		panConfig.setBackground(Color.WHITE);
    		
    		panAccueil.add(installation);
    		panAccueil.add(preferences);
    		panAccueil.add(configuration);
    		panAccueil.add(enteteAccueil);
    		panAccueil.add(texteInstallation);
    		panAccueil.add(textePref);
    		panAccueil.add(texteConfig);
    //		panAccueil.add(imageInst);
    //		panAccueil.add(imagePref);
    //		panAccueil.add(imageConf);
    		
    		panInstal.add(precedentInstal);	
    		panInstal.add(enteteInstal);
    		
    		panPreferences.add(precedentPref);
    		panPreferences.add(entetePref);
    		
    		panConfig.add(precedentConf);
    		panConfig.add(enteteConf);
    		
    		installation.setBounds(100, 100, 150, 40);
    		preferences.setBounds(100, 180, 150, 40);
    		configuration.setBounds(100, 260, 150, 40);
    		
    /*ligne75*/		precedentInstal.setBounds(10, 270, 150, 40);
    /*ligne76*/		precedentConf.setBounds(10, 270, 150, 40);
    /*ligne77*/		precedentPref.setBounds(10, 270, 150, 40);
    		
    		enteteAccueil.setBounds(250, 10, 100, 10);
    		enteteInstal.setBounds(250, 10, 200, 10);
    		entetePref.setBounds(250, 10, 200, 10);
    		texteInstallation.setBounds(270, 100, 200, 40);
    		textePref.setBounds(270, 180, 200, 40);
    		texteConfig.setBounds(270, 260, 200, 40);
    //		imageInst.setBounds(10, 90, 63, 65);
    //		imagePref.setBounds(10, 165, 63, 63);
    //		imageConf.setBounds(10, 250, 61, 60);
    		
    		installation.addActionListener(new BlistenInstal(this));
    		preferences.addActionListener(new BlistenPref(this));
    		configuration.addActionListener(new BlistenConf(this));
    		precedentInstal.addActionListener(new BlistenPrecedentInst(this));
    		precedentPref.addActionListener(new BlistenPrecedentPref(this));
    		precedentConf.addActionListener(new BlistenPrecedentConf(this));
    		
    		this.setVisible(true);
    	}
    	
    	void init_param_fenetre(){
    		this.setTitle("Configuration");
    		this.setSize(600, 400);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setLocationRelativeTo(null);
    		this.setResizable(false);
    /*ligne105*/		this.setContentPane(panAccueil);
    	}
    	
    	//Boutons du JPanel d'accueil
    	public class BlistenInstal implements ActionListener{
    		Fenetre fen;
    		
    		public BlistenInstal(Fenetre fen){
    			this.fen = fen;
    		}
    		public void actionPerformed(final ActionEvent arg0){
    			fen.setContentPane(panInstal);
    			fen.validate();
    		}
    	}
    	
    	public class BlistenPref implements ActionListener{
    		Fenetre fen;
    		
    		public BlistenPref(Fenetre fen){
    			this.fen = fen;
    		}
    		public void actionPerformed(final ActionEvent arg0){
    			fen.setContentPane(panPreferences);
    			fen.validate();
    		}
    	}
    	
    	public class BlistenConf implements ActionListener{
    		Fenetre fen;
    		
    		public BlistenConf(Fenetre fen){
    			this.fen = fen;
    		}
    		public void actionPerformed(final ActionEvent arg0){
    			fen.setContentPane(panConfig);
    			fen.validate();
    		}
    	}
    	
    	//Boutons "précédent" pour chaque JPanel choisi
    	public class BlistenPrecedentInst implements ActionListener{
    		Fenetre fen;
    		
    		public BlistenPrecedentInst(Fenetre fen){
    			this.fen = fen;
    		}
    		public void actionPerformed(final ActionEvent arg0){
    			fen.setContentPane(panAccueil);
    			fen.validate();
    		}
    	}
    	
    	public class BlistenPrecedentPref implements ActionListener{
    		Fenetre fen;
    		
    		public BlistenPrecedentPref(Fenetre fen){
    			this.fen = fen;
    		}
    		public void actionPerformed(final ActionEvent arg0){
    			fen.setContentPane(panAccueil);
    			fen.validate();
    		}
    	}
    	
    	public class BlistenPrecedentConf implements ActionListener{
    		Fenetre fen;
    		
    		public BlistenPrecedentConf(Fenetre fen){
    			this.fen = fen;
    		}
    		public void actionPerformed(final ActionEvent arg0){
    			fen.setContentPane(panAccueil);
    			fen.validate();
    		}
    	}
    }
    


    et le main :

    public class Test {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Fenetre fen = new Fenetre();
    
    	}
    
    }
    


    Merci de votre réponse
    • Partager sur Facebook
    • Partager sur Twitter
      17 janvier 2011 à 19:44:05

      Bonjour, je ne comprends pas ce que tu essayes de dire.

      Les boutons aux lignes 75 à 77 sont rattachés à trois panneaux différents qui ne semblent avoir de point commun ni avec panAccueil ni avec la ligne 105.
      • Partager sur Facebook
      • Partager sur Twitter
        17 janvier 2011 à 19:57:05

        Bonjour,

        En fait lorsque je run mon programme je m'aperçois que les composants du JPanel panAccueil sont bien placé comme je l'ai indiqué cependant les composants des JPanels panInstal, panConf & panPref à savoir "precedentInstal"/"enteteInstal", "precedentConf"/"enteteConf" et "precedentPref"/"entetePref" (ajoutés lignes 62 à 69) respectivement ne se positionnent pas comme je le souhaites (positionnement lignes 75 à 81).

        Vois-tu ce que je veux dire ?
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          17 janvier 2011 à 20:26:13

          Salut,

          On ne fait pas de setLayout sur une JFrame mais sur son content pane.

          ++
          • Partager sur Facebook
          • Partager sur Twitter
            17 janvier 2011 à 20:33:50

            Salut et merci,

            Cependant je ne comprends pas très bien ce que tu veux dire, cela m'a l'air de marcher du moment que je me restreint à 1 JPanel.
            De plus je ne vois pas comment faire ce que tu me demandes, et ce même après avoir lu et relu le cours JAVA du sdz :(
            Peux-tu m'éclairer un peu ?

            Merci d'avance !
            • Partager sur Facebook
            • Partager sur Twitter
              17 janvier 2011 à 22:19:55

              Bonsoir, Java est très adapté pour le placement des composants par Layout, pourquoi ne t'en sers-tu pas ? Le placement des objets à la main (setBounds) peut paraître archaïque ou en tout cas fastidieux dans un langage objet ; d'ailleurs visiblement tu ne le maîtrises pas et aboutis à une erreur. Tu es sûr quel es coordonnées que tu as placées sont bonnes ?
              • Partager sur Facebook
              • Partager sur Twitter
                17 janvier 2011 à 22:48:38

                Salut Agbeladem et merci pour ta réponse.

                J'ai pensé à utiliser les Layout pour positionner mes composants mais je n'ai malheureusement pas réussi à m'en servir. En effet ces derniers semblent ne positionner les composants que les uns par rapport aux autres et non pas par rapport à leur fenêtre. J'aurais aimé avoir la possibilité de pouvoir les mettre ou je veux par rapport aux bords de ma JFrame un peu à la manière des fenêtres xHTML si tu vois ce que je veux dire.

                De plus j'ai bel et bien testé mes coordonnées et ce n'est pas cela qui plante, il semble que cela vient du JPanel que j'initialise ligne 105.
                En effet, si je change de JPanel de départ (par exemple panInstal au lieu de panAccueil) alors les composants de ce dernier se retrouvent placés comme je le souhaite :s
                A tout hasard cela viendrait-t'il du fait que j'utilise des JPanel au lieu de JLayeredPane (je vois ce mot revenir sur les forums régulièrement).

                Voilà, merci
                • Partager sur Facebook
                • Partager sur Twitter
                  17 janvier 2011 à 23:00:55

                  Non les JPanel sont vraiment optimisés pour pouvoir servir à toutes sortes de choses. Sache que pour la plupart des situations de fenêtrages, le layout va te permettre d'obtenir le résultat voulu.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 janvier 2011 à 23:38:40

                    Certes mais il me semble que le problème ne vient pas du positionnement, en effet les composants des JPanels panInstal, panPref & panConf s'affichent mais au milieu et non pas là où je les positionne.
                    De plus comment un layout peut me permettre de placer les composants où je veux ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      18 janvier 2011 à 10:23:42

                      He bien il y toujours une logique derrière le placement des composants, et les différents layout permettent de recouvrir l'essentiel de ces logiques telles qu'utilisées dans les interfaces usuelles de logiciel. Le positionnement absolu t'empêchera d'avoir un bon comportement lors du redimensionnement de la fenêtre, sauf si tu le prends en compte ce qui devient vite laborieux.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Interface IHM

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown