在限制 JDialog 尺寸的過程中,即使使用 setMaximumSize() 方法,您也可能會遇到意外行為。本文旨在澄清此問題並提供解決方案。
使用包含滾動窗格和固定大小面板的 JDialog 時,目標是讓對話框根據嵌入面板的大小動態擴展。然而,嘗試使用 setMaximumSize() 設定最大尺寸並沒有明顯效果。
組件的預設最大尺寸通常設定為組件的尺寸監視器。這是因為最大尺寸是從父組件繼承的,父組件可能將最大尺寸設定的很大。
達到想要的效果如果要在特定限制內動態調整大小,請考慮設定滾動窗格的首選大小。設定滾動窗格的首選大小後,JDialog 將相應擴展,直到達到閾值。此時,將會出現捲軸。
以下Java 程式碼片段示範如何使用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>
This程式碼根據JList 中的項目數動態調整JDialog 的大小。一旦達到最大大小(在本例中為 12 行),就會出現捲軸。
以上是如何動態調整 JDialog 的大小並設定最大限制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!