Rumah >Java >javaTutorial >Bagaimana Swing's GroupLayout Boleh Menguruskan Semula Komponen dan Had Saiz dengan Berkesan dalam Borang Dijana Secara Dinamik?

Bagaimana Swing's GroupLayout Boleh Menguruskan Semula Komponen dan Had Saiz dengan Berkesan dalam Borang Dijana Secara Dinamik?

Barbara Streisand
Barbara Streisandasal
2024-12-02 06:37:09756semak imbas

How Can Swing's GroupLayout Effectively Manage Component Resizing and Size Limits in Dynamically Generated Forms?

Swing GroupLayout: Menguruskan Saiz dan Mengehadkan Komponen

Dalam Swing, GroupLayout menawarkan mekanisme yang teguh untuk mengurus reka letak komponen. Walau bagaimanapun, apabila berurusan dengan kandungan dinamik dan reka letak responsif, adalah perlu untuk mengawal saiz semula dan mengehadkan saiz komponen.

Pertimbangkan senario di mana beberapa borang input data yang dijana secara dinamik menggunakan GroupLayout, dengan reka letak yang serupa dengan:

*-----------------------------------------------*
| label A     |   field A                       |
| label B     |   field B                       |
| label C     |   field C                       |
*-----------------------------------------------*

Untuk mengehadkan lebar maksimum label (contoh JLabel) kepada pecahan tertentu lebar bingkai induk, seseorang mungkin menggunakan ComponentListener:

public void componentResized(ComponentEvent e) {
    int maxW = parentFrame.getWidth() / 3;
    for (JLabel l : labels) {
        l.setMaximumSize( // have also tried setSize() and setPreferredSize()
            new Dimension(
                Math.min(l.getSize().width, maxW),
                l.getMaximumSize().height));
    }
    groupLayout.invalidateLayout(getContentSpace());
}

Walau bagaimanapun, pendekatan ini mungkin tidak menghasilkan hasil yang diingini.

Penyelesaian Cadangan: Leverage GroupLayout's Preferred Size

GroupLayout menyediakan penyelesaian yang lebih elegan dengan bergantung pada saiz pilihan label:

public class GroupPanel extends JPanel {
    // ...
    // Create a GroupLayout and set group constraints
    GroupLayout layout = new GroupLayout(this);
    this.setLayout(layout);
    layout.setAutoCreateGaps(true);
    layout.setAutoCreateContainerGaps(true);
    layout.setHorizontalGroup(layout.createSequentialGroup()
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
            .addComponent(label1)
            .addComponent(label2)
            .addComponent(label3))
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addComponent(field1)
            .addComponent(field2)
            .addComponent(field3))
    );
    layout.setVerticalGroup(layout.createSequentialGroup()
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(label1)
            .addComponent(field1))
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(label2)
            .addComponent(field2))
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(label3)
            .addComponent(field3))
    );
    // ...
}

Faedah pendekatan ini:

  • Ruang yang diperuntukkan untuk label memuatkan walaupun label yang paling luas.
  • Medan teks boleh diubah saiz dengan sewajarnya.
  • Tingkah laku adalah konsisten merentas platform dan fon.
  • GroupLayout secara automatik mengendalikan kebanyakan tingkah laku saiz semula, meminimumkan keperluan untuk pelarasan manual.

Dengan menggunakan mekanisme saiz pilihan, GroupLayout menyediakan cara yang mudah dan berkesan untuk uruskan saiz semula komponen dan had dalam borang input data yang dijana secara dinamik.

Atas ialah kandungan terperinci Bagaimana Swing's GroupLayout Boleh Menguruskan Semula Komponen dan Had Saiz dengan Berkesan dalam Borang Dijana Secara Dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn