JDialog を構成する場合、開発者は多くの場合、JDialog のコンテンツに対する相対的な拡張方法を制御するために最大サイズを指定する必要があります。ただし、デフォルトの動作では、コンポーネントが小さい場合でも、ダイアログがモニター全体を占める可能性があります。この記事では、JDialog の最大サイズを設定する仕組みを調査し、いくつかの一般的な落とし穴に対処します。 java.awt.Component から継承された () メソッドを使用すると、開発者はコンポーネントの可能な最大の寸法を定義できます。コンポーネントのサイズがこの制限を超えると、それ以上拡大するのではなく、自動的にスクロールバーが表示されます。
.setMinimumSize()
元の質問では、作成者は特定の時点までのコンテンツに基づいてダイアログのサイズを動的に変更し、その後スクロールバーを追加したいと考えていました。ただし、最大サイズを直接設定しても効果はないようです。これは次の原因が考えられます:
デフォルトの最大サイズ:
デフォルトでは、Swing コンポーネントの最大サイズは 32767 x 32767 であり、実質的に制限は無効になります。例を示します:
... // アイテムの数に基づいてビューポートの優先サイズを設定します list.setVisibleRowCount(Math.min(item_count,preferred_max_size)); ...具体例
...
// Set the viewport's preferred size based on the number of items
list.setVisibleRowCount(Math.min(item_count, preferred_max_size));
...
... javax.swing.* をインポートします。 パブリック クラス ListDialog { プライベート JDialog dlg = new JDialog(); プライベート JList リスト = new JList(); private JScrollPane sp = new JScrollPane(list); ... // 項目を追加し、スクロール ペインのサイズを更新します private void append() { list.ensureIndexIsVisible(count - 1); // スクロール ペインのサイズがコンテンツに適応するようにします sp.getViewport().setPreferredSize(list.getPreferredSize()); dlg.pack(); } ...
結論
...
import javax.swing.*;
public class ListDialog {
private JDialog dlg = new JDialog();
private JList list = new JList();
private JScrollPane sp = new JScrollPane(list);
...
// Add items and update the scroll pane size
private void append() {
list.ensureIndexIsVisible(count - 1);
// Ensure the scroll pane size adapts to the content
sp.getViewport().setPreferredSize(list.getPreferredSize());
dlg.pack();
}
...
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3