Cara Tetapkan Saiz Maksimum JDialog
Masalah:
Dalam JDialog dengan BorderLayout yang mengandungi anak tetingkap tatal dan butang kawalan di bawahnya, tingkah laku yang diperlukan adalah untuk dialog melaraskan saiznya secara dinamik untuk menampung kandungan anak tetingkap tatal sehingga saiz maksimum yang ditentukan dicapai. Walau bagaimanapun, menetapkan saiz maksimum menggunakan setMaximumSize() nampaknya tidak mempunyai kesan.
Jawapan:
Walaupun kaedah setMaximumSize() sememangnya harus mengehadkan saiz maksimum dialog, ia mungkin tidak berfungsi seperti yang diharapkan disebabkan oleh interaksi antara BorderLayout, anak tetingkap tatal dan tetapan saiz pilihan.
Untuk menangani perkara ini, pertimbangkan untuk menggunakan pendekatan berikut:
Contoh:
Untuk menunjukkan pendekatan ini, pertimbangkan JDialog berikut dengan JList yang menambah secara dinamik barang. Dialog mengembang sehingga mencapai ketinggian maksimum, selepas itu bar skrol muncul.
<code class="java">import java.awt.BorderLayout; 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 { // Initial number of items and maximum height private static final int INITIAL_COUNT = 5; private static final int MAX_HEIGHT = 200; 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 = INITIAL_COUNT; public ListDialog() { JPanel panel = new JPanel(); panel.add(new JButton(new AbstractAction("Add") { @Override public void actionPerformed(ActionEvent e) { append(); sp.revalidate(); dlg.pack(); // Check if maximum height exceeded if (dlg.getHeight() > MAX_HEIGHT) { list.setVisibleRowCount(count); } } })); // Create initial items for (int i = 0; i < INITIAL_COUNT; i++) { this.append(); } list.setVisibleRowCount(INITIAL_COUNT); 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 " + String.valueOf(++count)); list.ensureIndexIsVisible(count - 1); } public static void main(String[] a_args) { new ListDialog(); } }</code>
Atas ialah kandungan terperinci Bagaimana untuk Melaraskan Saiz JDialog secara Dinamik dengan Had Ketinggian Maksimum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!