在限制 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中文网其他相关文章!