Die pack()-Methode in Java

Shikha Chaudhary 15 Februar 2024
  1. Verwendung der Methode SetBounds() in Java
  2. Verwendung der Pack()-Methode in Java
  3. Fazit
Die pack()-Methode in Java

Die in der Window-Klasse in Java definierte pack()-Methode passt den Rahmen so an, dass der Inhalt des Rahmens die bevorzugte Größe erreicht oder überschreitet.

Wir können die Methode pack() ersetzen, indem wir die Framegrösse explizit definieren. Dazu verwenden wir die Methoden setSize() oder setBounds(). Die Methode setBounds() setzt auch die Frame-Position.

Anders als bei der pack()-Methode überlassen diese Methoden jedoch nicht dem Frame-Layout-Manager die Verantwortung für die Frame-Grösse. Der Frame-Layout-Manager kann sich an verschiedene Plattformen und andere Faktoren anpassen, die die Komponentengröße beeinflussen. Daher empfiehlt es sich, die Methode pack() zu verwenden.

Syntax:

public void pack()

Die Methode pack() bindet alle Komponenten zusammen. Um zu sehen, wie es funktioniert, schauen wir uns ein funktionierendes Beispiel an. Wir werden eine Schaltfläche erstellen, die Text im Textfeld zurückgibt, wenn Sie darauf klicken.

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);
  }
}

Ausgabe:

Verwendung der Methode setBounds()

Beachten Sie, dass wir in diesem Beispiel nirgendwo die Methode pack() verwenden. Stattdessen verwenden wir die Methode setBounds(). Die Argumente der Methode setBounds() sind für das Textfeld 50, 50, 150, 20 und für die Schaltfläche 50, 100, 95, 30.

Beachten Sie auch, dass die Schaltfläche nicht den gesamten Text anzeigen kann. Auch hierauf gehen wir in den folgenden Abschnitten ein. Wir wissen, dass die Layout-Manager die Größe und Position hinzugefügter Komponenten automatisch festlegen.

Da die Methode pack() die Layout-Manager für den Rahmen verantwortlich macht, müssen wir in ihrer Abwesenheit die Methode setBounds() verwenden.

Verwendung der Methode SetBounds() in Java

Um dies anstelle der Methode pack() zu verwenden, müssen wir Argumente übergeben, um die Position und Größe der Komponenten im Hauptfenster anzugeben.

Es braucht vier Argumente. Die ersten beiden dienen zur Angabe der Position(oben links) der Komponente und die letzten beiden zur Angabe der Größe(Breite-Höhe) der Komponente.

Syntax:

setBounds(int x - coordinate, int y - coordinate, int width, int height)

Sehen Sie sich den folgenden Codeabschnitt im obigen Beispiel an.

jf.setLayout(null);

Wenn wir die Methode setBounds() verwenden, setzen wir den layout manager auf null.

Verwendung der Pack()-Methode in Java

Sehen Sie sich nun ein weiteres Beispiel an, das die Methode pack() verwendet.

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();
  }
}

Ausgabe:

Verwendung der Methode pack()

In diesem Beispiel verwenden wir nicht die Methode setBounds(), um die Position und Größe der Komponenten festzulegen. Stattdessen rufen wir die Methode pack() auf, die sich alleine um die Grösse und Position der Komponenten kümmert.

Hier erweitert die Klasse ButtonDemo die Klasse JFrame. Die Klasse JFrame ist ein Container, der als Fenster fungiert, in dem die verschiedenen Komponenten der GUI wie Schaltflächen, Beschriftungen und Textfelder enthalten sind.

Wir können auch den folgenden Code anstelle der for-Schleife verwenden, aber es verlängert unnötig die Codelänge.

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);

Weitere Informationen zum Erstellen eines Frames mit Java finden Sie in dieser Dokumentation.

Wenn wir die Methode pack() entfernen, erhalten wir die Ausgabe, aber die Schaltflächen sind nur sichtbar, wenn die Größe des Panels geändert wird. Dies ist die Ausgabe, wenn wir weder die Methoden pack() noch setBounds() verwenden.

Ohne pack()- oder setBounds()-Methode

Wir können die Größe ändern, um die Schaltflächen zu sehen.

Ändern der Größe, um die Schaltflächen anzuzeigen

Aber das ist keine gute Darstellung, und deshalb müssen wir entweder die Methoden pack() oder setBounds() verwenden. Die Methode pack() ist einfach zu bedienen und präzise und erfüllt ihren Zweck in nur einer Codezeile.

Die Methode setBounds() benötigt die Koordinaten x und y als Argumente. Dies kann einiges an Umstellen und Nachjustieren erfordern, da die Bestimmung der Koordinaten auf einmal nicht einfach ist.

Auch die Methode pack() passt die Grösse des Buttons entsprechend an, aber die Methode setBounds() kann das nicht alleine. Wir müssen unterschiedliche Argumente für Breite und Höhe für unterschiedliche Textlängen innerhalb der Schaltfläche übergeben.

Schauen Sie sich noch einmal die Ausgabe des ersten Beispiels an.

Verwenden der Methode setBounds()

Der Button kann nicht den kompletten Text Click this button anzeigen, da die Grösse des Buttons kleiner ist als die Anforderung dieses Textes. Um dies zu korrigieren, müssen wir den Wert des Arguments Breite ändern.

Aber wenn wir die pack()-Methode verwenden, wird die Schaltfläche selbst entsprechend dem darin enthaltenen Text in der Größe angepasst.

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();
  }
}

Ausgabe:

Verwenden der pack()-Methode

Beachten Sie, dass der gesamte Text in die Schaltflächen passt, ohne dass die Größe manuell geändert werden muss. Dies ist der Vorteil der Verwendung der pack()-Methode gegenüber der setBounds()-Methode.

Um mehr über das Erstellen einer GUI mit Swing zu erfahren, lesen Sie diese Dokumentation.

Fazit

Die pack()-Methode macht den Layout-Manager verantwortlich, der die Komponenten auf dem Panel richtig verkleinert und positioniert.

Wir können die setBounds()-Methode als Alternative zur pack()-Methode verwenden, aber die Verwendung der pack()-Methode wird bevorzugt, da sie sich im Gegensatz zur setBounds()-Methode leicht an Änderungen anpassen kann. Die Methode pack() ist notwendig, um alle Komponenten miteinander zu verbinden.

Verwandter Artikel - Java GUI