Partage
  • Partager sur Facebook
  • Partager sur Twitter

LayoutManagers, une alternative?..

probleme de positionnement

Sujet résolu
    23 mai 2009 à 19:14:25

    Bonjour a tous et a toutes,
    je tente présentement d'apprendre Java grâce au tutoriel de Cysboy, (Je suis rendu ici!) et les Layout Managers me posent problèmes...

    J'aimerais pouvoir positionner un bouton a un endroit précis sans diviser mon écran en plusieurs partit, puisque j'y ait mit un arrière plan qui se coupe et s'affiche partiellement avec les Layout Manager. Et de toute façon je ne voit pas vraiment comment positionner mes boutons avec ceux ci...

    En fait, j'aimerais savoir si il existe une façon de positionner les boutons (et autres) un peu comme le positionnement absolu en CSS. Par exemple, mon programme ne comportera pas de contour avec les boutons classique que l'on retrouve dans presque tout les programmes sur Windows, donc j'aimerais bien un bouton en haut a droite pour fermer mon écran.

    J'espère avoir été asser claire...

    Merci d'avance pour votre aide!

    Un exemple de ce que cela donne avec un Layout Manager...
    Image utilisateur
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      23 mai 2009 à 19:19:55

      container.setLayoutManager(null);
      widget.addBounds(posX, posY, width, heigh);
      
      • Partager sur Facebook
      • Partager sur Twitter
        23 mai 2009 à 19:30:00

        Bonjour,
        Au risque de paraitre Noob, je n'arrive pas trop a comprendre la méthode... :'(
        Peut-être les package et les classes où les methodes sont?... :euh:
        • Partager sur Facebook
        • Partager sur Twitter
          23 mai 2009 à 19:33:05

          Ce ne serait pas plutôt setBounds ?

          Ca affiche le composant sur la fenêtre dans un rectangle en coordonnée x et y sur la fenêtre de de largeur width et de hauteur height
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            23 mai 2009 à 19:37:08

            oui c'est fort possible, c'est juste de mémoire, ça fait des lustres que j'ai pas fait de swing, mais c'était juste pour donner une piste.

            container c'est un JPanel (ou JFrame à vérifier), et widget ce que tu veux, un jlabel, un jbutton,...
            • Partager sur Facebook
            • Partager sur Twitter
              23 mai 2009 à 20:27:39

              Bonjour (encore >_< ),

              Pour simplifier la vie un tout petit peu, j'ai le code suivant:
              package sf;
              
              import sf.display.Frame;
              import sf.display.Images;
              
              import javax.swing.JPanel;
              import javax.swing.JButton;
              
              public class Main {
              
              	/**
              	 * @param args
              	 */
              	public static void main(String[] args) {
              		//Instanciation des objets
              		Frame mainFrame = new Frame(806, 630, "Final War");
              		JPanel mainPanel = new JPanel();
              		JButton bouton = new JButton("Bouton");
              		Images background = new Images("background.jpg", mainPanel);
              		
              		//Configurations
              		mainFrame.setResizable(false);
              		mainPanel.setLayout(null);
              		
              		//Ajout des objet sur l'interface
              		mainFrame.getContentPane().add(background);
              		mainFrame.getContentPane().add(bouton);
              		
              		//Morceau qui pose problème...
              		bouton.setBounds(100, 100, 10, 10); 
              	}
              }
              


              Et si jamais cela peu vous être utile, les deux classes utiliser:

              package sf.display;
              
              import javax.swing.JFrame;
              
              public class Frame extends JFrame{
              	public Frame(int width, int height, String title){
              		//Le programme est arrêter lorsque l'on appuis sur X
              		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              		//Fenêtre visible
              		this.setVisible(true);
              		//Titre
              		this.setTitle(title);
              		//Taille
              		this.setSize(width, height);
              		//Centrer
              		this.setLocationRelativeTo(null);
              
              	}
              }
              


              package sf.display;
              
              import java.awt.Graphics;
              import java.awt.Image;
              import java.io.File;
              import java.io.IOException;
              import javax.imageio.ImageIO;
              import javax.swing.JPanel;
              
              public class Images  extends JPanel{
              	protected String path;
              	protected JPanel panel;
              	
              	public Images(String p, JPanel pan){
              		path = p;
              		panel = pan;
              	}
              	
              	public void paintComponent(Graphics g){
              	    try {
              	        Image img = ImageIO.read(new File(this.path));
              	        g.drawImage(img, 0, 0, panel);
              	    } catch (IOException e) {
                      	e.printStackTrace();
                      }  
                  }
              }
              


              Mon problème étant que la fonction setBounds... reste un mystère pour moi :euh: Et je n'arrive pas a la trouver dans la Doc' (qui est encore flou pour moi...).

              Je vous remercie d'avance pour votre aide grandement apprécier!

              EDIT: Précision, le code me donne un grooos bouton qui prend l'espace entière et cache mon arrière plan. :o
              • Partager sur Facebook
              • Partager sur Twitter
                23 mai 2009 à 20:38:08

                Bah oui la layout manager par défaut de ta fenêtre c'est le BorderLayout.CENTER du coup ton bouton prend toute la place de ta fenêtre.

                Si tu ne veux pas que ça arrive fait :
                widget.setLayout (new FlowLayout ());
                


                Et là ça va marcher.
                Ou tu fais setBounds (0, 0, bouton.getWidth (), bouton.getHeight());
                Et puis tu ajoute ton bouton sur ton widget.
                Et setBounds si tu veux savoir tu tapes sur google java, le nulllayout et tu vas trouver. :)
                • Partager sur Facebook
                • Partager sur Twitter
                  24 mai 2009 à 4:15:12

                  Voila! J'ai réussit en cherchant, en créant une classe pour mes boutons et tout fonctionne a merveille :) un grand merci a vous! :)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  LayoutManagers, une alternative?..

                  × 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