如何設定JDialog 的最大大小
問題:
問題:問題:
在包含滾動窗格和其下方的控制按鈕的BorderLayout,所需的行為是對話方塊動態調整其大小以適應滾動窗格的內容,直到達到指定的最大大小。然而,使用 setMaximumSize() 設定最大尺寸似乎沒有效果。
動態調整視口大小:根據步驟 1 中從組件取得的資訊設定視窗的首選大小。對於 JList,list.setVisibleRowCount( count) 可用於在新增項目時調整視窗的高度。
重新驗證並重新打包對話框:
修改視口大小後,重新驗證並重新打包對話方塊以套用變更。 dlg.revalidate(); dlg.pack();將確保對話方塊適應新的首選大小。<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>
以上是如何動態調整JDialog的大小並限制最大高度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!