La méthode pack() en Java
Définie dans la classe Window de Java, la méthode pack()
dimensionne le cadre de sorte que le contenu du cadre soit égal ou supérieur à ses tailles préférées.
Nous pouvons remplacer la méthode pack()
en définissant explicitement la taille de la trame. Pour cela, nous utilisons les méthodes setSize()
ou setBounds()
. La méthode setBounds()
définit également l’emplacement du cadre.
Mais ces méthodes ne laissent pas le gestionnaire de mise en page des cadres en charge de la taille des cadres, contrairement à la méthode pack()
. Le gestionnaire de disposition de cadre peut s’adapter à différentes plates-formes et à d’autres facteurs qui affectent la taille du composant. Il est donc conseillé d’utiliser la méthode pack()
.
Syntaxe:
public void pack()
La méthode pack()
lie tous les composants entre eux. Pour voir comment cela fonctionne, regardons un exemple de travail. Nous allons créer un bouton qui renvoie du texte dans le champ de texte en cliquant dessus.
import java.awt.event.*;
import javax.swing.*;
public class ButtonDemo {
public static void main(String[] args) {
JFrame jf = new JFrame("Button Example");
final JTextField tf = new JTextField();
// using setBounds() method for textfield
tf.setBounds(50, 50, 150, 20);
JButton b = new JButton("Click this button");
// using setBounds() method for Button
b.setBounds(50, 100, 95, 30);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tf.setText("Java is interesting.");
}
});
jf.add(b);
jf.add(tf);
jf.setSize(300, 300);
jf.setLayout(null);
jf.setVisible(true);
}
}
Production :
Notez que nous n’utilisons la méthode pack()
nulle part dans cet exemple. A la place, nous utilisons la méthode setBounds()
. Les arguments de la méthode setBounds()
pour le champ texte sont 50, 50, 150, 20
et pour le bouton, ils sont 50, 100, 95, 30
.
Notez également que le bouton ne peut pas afficher l’intégralité du texte. Nous examinerons également cela dans les sections ci-dessous. Nous savons que les gestionnaires de mise en page définissent automatiquement la taille et la position des composants ajoutés.
Étant donné que la méthode pack()
est celle qui rend les gestionnaires de mise en page en charge du cadre, nous devons utiliser la méthode setBounds()
en son absence.
Utilisation de la méthode SetBounds()
en Java
Pour l’utiliser à la place de la méthode pack()
, nous devons passer des arguments pour spécifier la position et la taille des composants à l’intérieur de la fenêtre principale.
Il faut quatre arguments. Les deux premiers permettent de spécifier la position (haut-gauche)
du composant et les deux derniers permettent de spécifier la taille (largeur-hauteur)
du composant.
Syntaxe:
setBounds(int x - coordinate, int y - coordinate, int width, int height)
Regardez le morceau de code suivant dans l’exemple ci-dessus.
jf.setLayout(null);
Lorsque nous utilisons la méthode setBounds()
, nous définissons le layout manager
comme nul.
Utilisation de la méthode Pack()
en Java
Maintenant, regardez un autre exemple qui utilise la méthode pack()
.
import java.awt.*;
import javax.swing.*;
public class ButtonDemo extends JFrame {
public ButtonDemo() { // This is the name of the class
// This will appear in the title bar of output window
setTitle("Buttons using pack()");
setLayout(new FlowLayout());
setButton();
// This calls the pack method
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
void setButton() {
for (int i = 1; i < 9; i++) {
add(new JButton("Button" + i));
}
}
public static void main(String args[]) {
new ButtonDemo();
}
}
Production :
Dans cet exemple, nous n’utilisons pas la méthode setBounds()
pour définir la position et la taille des composants. Au lieu de cela, nous appelons la méthode pack()
, qui s’occupe de la taille et de la position des composants par elle-même.
Ici, la classe ButtonDemo
étend la classe JFrame
. La classe JFrame
est un conteneur qui agit comme une fenêtre pour contenir les différents composants de l’interface graphique tels que les boutons, les étiquettes et les champs de texte.
De plus, nous pouvons utiliser le code suivant à la place de la boucle for
, mais cela augmente inutilement la longueur du code.
JButton b1 = new JButton("Button 1");
JButton b2 = new JButton("Button 2");
JButton b3 = new JButton("Button 3");
JButton b4 = new JButton("Button 4");
JButton b5 = new JButton("Button 5");
JButton b6 = new JButton("Button 6");
JButton b7 = new JButton("Button 7");
JButton b8 = new JButton("Button 8");
add(b1);
add(b2);
add(b3);
add(b4);
add(b5);
add(b6);
add(b7);
add(b8);
Pour en savoir plus sur la création d’un cadre à l’aide de Java, reportez-vous à cette documentation.
Si nous supprimons la méthode pack()
, nous obtiendrons la sortie, mais les boutons ne sont visibles que lors du redimensionnement du panneau. Ceci est la sortie lorsque nous n’utilisons ni les méthodes pack()
ni setBounds()
.
Nous pouvons le redimensionner pour voir les boutons.
Mais ce n’est pas une bonne représentation, et par conséquent, nous devons utiliser l’une des méthodes pack()
ou setBounds()
. La méthode pack()
est facile à utiliser et précise et remplit son rôle en une seule ligne de code.
La méthode setBounds()
a besoin des coordonnées x
et y
comme arguments. Cela peut nécessiter beaucoup de modifications et de réajustements, car il n’est souvent pas facile de déterminer les coordonnées en une seule fois.
De plus, la méthode pack()
ajuste la taille du bouton en conséquence, mais la méthode setBounds()
ne peut pas le faire toute seule. Nous devons passer différents arguments pour la largeur et la hauteur pour différentes longueurs de texte à l’intérieur du bouton.
Regardez à nouveau la sortie du premier exemple.
Le bouton ne peut pas afficher le texte complet Cliquez sur ce bouton
car la taille du bouton est inférieure à l’exigence de ce texte. Pour rectifier cela, nous devrons changer la valeur de l’argument largeur.
Mais si nous utilisons la méthode pack()
, elle redimensionnera le bouton tout seul en fonction du texte qu’il contient.
import java.awt.*;
import javax.swing.*;
public class ButtonDemo extends JFrame {
public ButtonDemo() {
setTitle("Using the pack() method");
setLayout(new FlowLayout());
setButton();
// Calling the pack() method
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
void setButton() {
for (int i = 1; i < 7; i++) {
add(new JButton("Click this Button" + i));
}
}
public static void main(String args[]) {
new ButtonDemo();
}
}
Production :
Notez que le texte entier tient à l’intérieur des boutons sans avoir à le redimensionner manuellement. C’est l’avantage d’utiliser la méthode pack()
par rapport à la méthode setBounds()
.
Pour en savoir plus sur la création d’une interface graphique à l’aide de Swing, reportez-vous à cette documentation.
Conclusion
La méthode pack()
prend en charge le gestionnaire de mise en page, qui redimensionne et positionne correctement les composants sur le panneau.
Nous pouvons utiliser la méthode setBounds()
comme alternative à la méthode pack()
mais l’utilisation de la méthode pack()
est préférée car elle s’adapte facilement aux changements par elle-même, contrairement à la méthode setBounds()
méthode. La méthode pack()
est nécessaire pour lier tous les composants entre eux.