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:
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!