Partage
  • Partager sur Facebook
  • Partager sur Twitter

Java et interface graphique

Sujet résolu
    18 octobre 2008 à 15:18:52

    Bonjour,

    J'ai une application java avec un menu bar. Je veux que mon texte de ma fenetre change en fonction du menu où je clique. Le problème c'est que je ne peux pas ajouter plusieurs label à mon container.

    public class Fenetre extends JFrame {
    
    private JPanel container = new JPanel();
    //Déclaration des labels
    private JLabel label = new JLabel();
    private JLabel label2 = new JLabel();
    
    public Fenetre(){
    container.setLayout(new BorderLayout());
    label.setText("salut");
    label2.setText(" ça va?");
    container.add(label);
    container.add(label2);
    
    this.setContentPane(container);
    
    //On rend la fenetre visible
     this.setVisible(true);
    }
    


    Ce bout de code m'affiche juste "ça va?" au lieu de "salut ça va?" Comment faire pour ajouter plusieurs objets à mon container. Pareil, lorsque je veux ajouter une image de fond, je n'arrive pas à ajouter à la fois du texte et mon image, seul le dernier appel est pris en compte.

    Merci de m'aider.

    Chriss.
    • Partager sur Facebook
    • Partager sur Twitter
      18 octobre 2008 à 15:35:08

      Bonjour lecrycry.

      Ton problème viens du fait que tu ajoute le second label au même endroit que le premier.
      Dans ton code tu as décidé d'utiliser un BorderLayout mais tu n'indique pas ou tu place ton label dans celui-ci.

      Donc une des solutions serait tout simplement de faire ceci :

      import java.awt.BorderLayout;
      import javax.swing.JFrame;
      import javax.swing.JLabel;
      import javax.swing.JPanel;
      
      
      public class Fenetre extends JFrame 
      {
      	private static final long serialVersionUID = 1L;
      	
      	private JPanel container = new JPanel();
      	private JLabel label = new JLabel();
      	private JLabel label2 = new JLabel();
      
      	public Fenetre()
      	{
      		container.setLayout(new BorderLayout());
      		label.setText("salut");
      		label2.setText(" ça va?");
      		
      		container.add(label ,BorderLayout.WEST);
      		container.add(label2, BorderLayout.EAST);
      		
      		setContentPane(container);
      		
      		setSize(300, 200);
      		setVisible(true);
      	}
      	
      	public static void main( String [] args )
      	{
      		new Fenetre();
      	}
      }
      


      On indique que l'on place le premier a gauche et le second à droite.
      On pourrait aussi bien dire que le premier est a gauche et le second au milieu (BorderLayout.CENTER)

      Image utilisateur

      Sinon il y a d'autres solutions qui impliquent de ne pas choisir un Borderlayout, mais par exemple un FlowLayout ou un GridLayout.
      Ce serait peut-être pas mal que tu regardes de ce coté là.

      Voila j'espère avoir plus ou moins répondu à ta question.
      • Partager sur Facebook
      • Partager sur Twitter
        18 octobre 2008 à 15:49:20

        Ok merci beaucoup, en effet ça venait de là, par contre j'ai une autre question. Comment mettre une image de fond à un JFrame ? Car j'ai le meme probleme je ne peux pas mettre au même endroit mon image de fond et mon texte.

        Merci de ton aide.
        • Partager sur Facebook
        • Partager sur Twitter
          18 octobre 2008 à 17:11:28

          Alors effectivement je ne me suis jamais posé la question ...
          je n'ai jamais souhaité mettre d'image en fond ( peut-être car c'est moche :-°:p )

          Non par contre j'ai trouvé une solution sur un site concurrent donc voila :

          Nouvelle classe "JPanelImageBg.java" permettant d'afficher un background :
          import javax.swing.*; 
          import java.awt.*; 
          import java.awt.image.*; 
          
          public class JPanelImageBg extends JComponent
          {
          	private int mode;
          	private TexturePaint texture; 
          	private BufferedImage bufferedImage; 
          
          	public static final int CENTRE = 0;
          	public static final int TEXTURE = 1;
          
          	JPanelImageBg( String fileName, int mode )
          	{	this.mode = mode;
          		this.bufferedImage = this.toBufferedImage(Toolkit.getDefaultToolkit().getImage(fileName));
          		this.texture = new TexturePaint(bufferedImage,new Rectangle(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight())); 
          	} 
          
          	public void paintComponent(Graphics g)
          	{	switch( mode )
          		{	case TEXTURE :
          				Graphics2D g2d = (Graphics2D)g; 
          				g2d.setPaint(texture);
          				g2d.fillRect(0, 0, getWidth(), getHeight() );
          				break;
          			case CENTRE :
          				g.setColor(this.getBackground());
          				g.fillRect(0,0,getWidth(), getHeight() );
          				g.drawImage(bufferedImage,(getWidth()-bufferedImage.getWidth())/2,(getHeight()-bufferedImage.getHeight())/2,null);
          				break;
          			default :
          				super.paintComponents(g);
          		}
          	}
          
          
          	private BufferedImage toBufferedImage(Image image)
          	{	image = new ImageIcon(image).getImage(); 
          
          		BufferedImage bufferedImage = new BufferedImage( image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB); 
          		Graphics g = bufferedImage.createGraphics(); 
          
          		g.setColor(Color.white); 
          		g.fillRect(0, 0, image.getWidth(null), 
          		image.getHeight(null)); 
          		g.drawImage(image, 0, 0, null); 
          		g.dispose(); 
          		return bufferedImage; 
          	}
          
          }
          


          et le code a utiliser :

          import java.awt.BorderLayout;
          import javax.swing.JFrame;
          import javax.swing.JLabel;
          
          
          public class Fenetre extends JFrame 
          {
          	private static final long serialVersionUID = 1L;
          	
          	private JLabel label;
          	private JLabel label2;
          	private JPanelImageBg imp;
          	
          
          	public Fenetre()
          	{
          		// INIT FENETRE
          		setSize(300, 200);
          		
          		// VARIABLES
          		label  	= new JLabel();
          		label2 	= new JLabel();
          		imp 	= new JPanelImageBg("TON_IMAGE.png",JPanelImageBg.CENTRE);
          		
          		label.setText("salut");
          		label2.setText(" ça va?");
          		
          		imp.setLayout( new BorderLayout() );
          		setContentPane(imp);	
          		
          		
          		// AJOUTS
          		add(label ,BorderLayout.WEST);
          		add(label2, BorderLayout.EAST);
          		
          	
          		// AFFICHAGE
          		setVisible(true);
          	}
          	
          	
          	public static void main( String [] args )
          	{
          		new Fenetre();
          	}
          }
          


          Voila, donc ce n'est pas super compliqué.
          En regardant le code de la classe trouvé sur developpez.com, tu peut même te faire ton propre JPanel qui permet d'afficher une image en background ;) .
          • Partager sur Facebook
          • Partager sur Twitter
            18 octobre 2008 à 18:31:34

            ok merci beaucoup ça marche nikel
            • Partager sur Facebook
            • Partager sur Twitter

            Java et interface graphique

            × 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