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
Lepaskan: 2024-12-02 06:37:09
asal
690 orang telah melayarinya

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                       |
*-----------------------------------------------*
Salin selepas log masuk

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());
}
Salin selepas log masuk

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))
    );
    // ...
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan