En n'utilisant pas de répartiteur

     

Si vous voulez dimensionner et positionner les sous-composants graphiques d'un composant, vous pouvez le faire grâce aux méthodes setSize (pour indiquer la largeur et la hauteur), setLocation (pour indiquer les coordonnées du coin supérieur gauche) et setBounds (pour indiquer la largeur et la hauteur puis les coordonnées du coin supérieur gauche). Ces méthodes sont issues de la classe java.awt.Component.
Néanmoins, il est presque toujours préférable d'utiliser des gestionnaires de répartition pour positionner les sous-composants.

L'image ci-dessus correspond à l'application ci-dessous. Aucun événement n'est intercepté. L'application "ne fait rien".


import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;

public class Libre extends JPanel {
  public Libre() {
    JButton bouton = new JButton("bouton");
    JScrollPane ecriture = new JScrollPane(new JTextArea());
    JLabel message = new JLabel("Bonjour", SwingConstants.CENTER);

    setLayout(null);
    setPreferredSize(new Dimension(200, 200)); 
    bouton.setBounds(30, 10, 150, 30);
    message.setBackground(Color.YELLOW);
    message.setOpaque(true);
    ecriture.setSize(100, 100);
    ecriture.setLocation(60, 50);
    message.setBounds(10, 170, 100, 20);
    add(bouton);
    add(ecriture);
    add(message);
  } 
}

class EssaiLibre {   
  public static void main(String[] argv=) {
      JFrame monCadre = new JFrame();

      monCadre.setContentPane(new Libre()); 
      monCadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      monCadre.pack();
      monCadre.setVisible(true); 
    }
}

Vous pouvez sauvegarder ce programme pour l'essayer.
setLayout(null); : on demande à ce qu`il n'y ait pas de gestionnaire de répartition.
setPreferredSize(new Dimension(200, 200)); : cette instruction n'est pas correllée avec le répartiteur de la classe concernée (qui n'existe d'ailleurs pas ici). L'intérieur de la fenêtre construite par notre application aura au départ 200*200 pixels, et cela parce que nous n'avons pas oublié d'utiliser la méthode pack appliquée à la fenêtre de l'application. On pourra modifier cette taille en étirant la fenêtre.
bouton.setBounds(30, 10, 150, 30); : le bouton aura 30 pixels de large, 10 de haut et son coin supérieur gauche aura pour coordonnées 150 en abscisse et 30 en ordonnée. Rappelons que le repère a pour origine le coin supérieur gauche du composant contenant ici le bouton.
message.setOpaque(true); : par défaut, un "JLabel" est transparent. Si on ne le rend pas opaque, on ne voit pas la couleur du "background" du "JLabel" message.
ecriture.setSize(100, 100); : la zone de texte ecriture aura pour dimensions 100 pixels de large et 100 pixels de haut.
ecriture.setLocation(60, 50); : le coin supérieur gauche de la zone de texte ecriture aura pour coordonnées 60 et 50 pixels.

© Irène Charon, Télécom ParisTech 2011