JDialog の最大サイズを設定する方法
問題:
JDialog でスクロール ペインとその下のコントロール ボタンを含む BorderLayout の場合、指定された最大サイズに達するまでスクロール ペインのコンテンツに合わせてダイアログのサイズを動的に調整することが必要な動作です。ただし、setMinimumSize() を使用して最大サイズを設定しても効果はないようです。
回答:
一方、setMinimumSize() メソッドは実際に、ダイアログでは、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 中国語 Web サイトの他の関連記事を参照してください。