首頁 > Java > java教程 > 主體

如何動態調整JDialog的大小並限制最大高度?

DDD
發布: 2024-10-24 03:35:30
原創
595 人瀏覽過

How to Dynamically Adjust the Size of a JDialog with a Maximum Height Limit?

如何設定JDialog 的最大大小

問題:

問題:

問題:

在包含滾動窗格和其下方的控制按鈕的BorderLayout,所需的行為是對話方塊動態調整其大小以適應滾動窗格的內容,直到達到指定的最大大小。然而,使用 setMaximumSize() 設定最大尺寸似乎沒有效果。

  1. 答案:
    雖然setMaximumSize() 方法確實應該限制最大尺寸對話框中,由於BorderLayout、滾動窗格和首選大小設定之間的交互,它可能無法如預期工作。
  2. 要解決此問題,請考慮使用以下方法:
  3. 提供有用的信息:確定滾動窗格中的任何組件是否可以提供用於設定視窗首選大小的資訊。 例如,JList 有一個方便的 setVisibleRowCount() 方法,可以幫助定義視窗的首選大小。

動態調整視口大小:根據步驟 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>
登入後複製
範例:要示範此方法,請考慮以下帶有動態新增 JList 的 JDialog項目。對話方塊將會展開至達到最大高度,然後出現捲軸。

以上是如何動態調整JDialog的大小並限制最大高度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板