Dalam usaha mengehadkan dimensi JDialog, anda mungkin menghadapi tingkah laku yang tidak dijangka walaupun selepas menggunakan kaedah setMaximumSize(). Artikel ini bertujuan untuk menjelaskan isu ini dan memberikan penyelesaian.
Apabila bekerja dengan JDialog yang mengandungi anak tetingkap skrol dan panel bersaiz tetap, matlamatnya ialah untuk membiarkan dialog berkembang secara dinamik berdasarkan saiz panel terbenam. Walau bagaimanapun, percubaan untuk menetapkan saiz maksimum menggunakan setMaximumSize() tidak mempunyai kesan yang ketara.
Saiz maksimum lalai komponen selalunya ditetapkan kepada saiz pantau. Ini kerana saiz maksimum diwarisi daripada komponen induk, yang mungkin telah menetapkan saiz maksimum kepada nilai yang besar.
Untuk mencapai yang diingini saiz dinamik dalam had tertentu, pertimbangkan untuk menetapkan saiz pilihan untuk anak tetingkap skrol. Apabila saiz pilihan anak tetingkap skrol ditetapkan, JDialog akan berkembang dengan sewajarnya sehingga ambang dicapai. Pada ketika itu, bar skrol akan muncul.
Coretan kod Java berikut menunjukkan cara melaksanakan penyelesaian ini menggunakan JList:
<code class="java">import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; public class ListDialog { private static final int N = 12; private JDialog dlg = new JDialog(); private DefaultListModel model = new DefaultListModel(); private JList list = new JList(model); private JScrollPane sp = new JScrollPane(list); private int count; public ListDialog() { JPanel panel = new JPanel(); panel.add(new JButton(new AbstractAction("Add") { @Override public void actionPerformed(ActionEvent e) { append(); if (count <= N) { list.setVisibleRowCount(count); dlg.pack(); } } })); for (int i = 0; i < N - 2; i++) { this.append(); } list.setVisibleRowCount(N - 2); dlg.add(sp, BorderLayout.CENTER); dlg.add(panel, BorderLayout.SOUTH); dlg.pack(); dlg.setLocationRelativeTo(null); dlg.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dlg.setVisible(true); } private void append() { model.addElement("String " + count++); list.ensureIndexIsVisible(count - 1); } public static void main(String[] a_args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { ListDialog pd = new ListDialog(); } }); } }</code>
Ini kod melaraskan saiz JDialog secara dinamik berdasarkan bilangan item dalam JList. Setelah saiz maksimum (dalam kes ini, 12 baris) dicapai, bar skrol akan muncul.
Atas ialah kandungan terperinci Bagaimana untuk Saiz JDialog secara Dinamik dengan Had Maksimum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!