如何设置 JDialog 的最大大小
问题:
在 JDialog 中包含滚动窗格和其下方的控制按钮的 BorderLayout,所需的行为是对话框动态调整其大小以适应滚动窗格的内容,直到达到指定的最大大小。然而,使用 setMaximumSize() 设置最大尺寸似乎没有效果。
答案:
虽然 setMaximumSize() 方法确实应该限制最大尺寸对话框中,由于 BorderLayout、滚动窗格和首选大小设置之间的交互,它可能无法按预期工作。
要解决此问题,请考虑使用以下方法:
示例:
要演示此方法,请考虑以下带有动态添加 JList 的 JDialog项目。对话框将展开直至达到最大高度,然后出现滚动条。
<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中文网其他相关文章!