Rumah  >  Artikel  >  Java  >  Bagaimana untuk Melaraskan Saiz JDialog secara Dinamik dengan Had Ketinggian Maksimum?

Bagaimana untuk Melaraskan Saiz JDialog secara Dinamik dengan Had Ketinggian Maksimum?

DDD
DDDasal
2024-10-24 03:35:30511semak imbas

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

Cara Tetapkan Saiz Maksimum JDialog

Masalah:

Dalam JDialog dengan BorderLayout yang mengandungi anak tetingkap tatal dan butang kawalan di bawahnya, tingkah laku yang diperlukan adalah untuk dialog melaraskan saiznya secara dinamik untuk menampung kandungan anak tetingkap tatal sehingga saiz maksimum yang ditentukan dicapai. Walau bagaimanapun, menetapkan saiz maksimum menggunakan setMaximumSize() nampaknya tidak mempunyai kesan.

Jawapan:

Walaupun kaedah setMaximumSize() sememangnya harus mengehadkan saiz maksimum dialog, ia mungkin tidak berfungsi seperti yang diharapkan disebabkan oleh interaksi antara BorderLayout, anak tetingkap tatal dan tetapan saiz pilihan.

Untuk menangani perkara ini, pertimbangkan untuk menggunakan pendekatan berikut:

  1. Sediakan Maklumat Berguna: Tentukan sama ada mana-mana komponen dalam anak tetingkap skrol boleh memberikan maklumat untuk menetapkan saiz pilihan port pandangan.
    Sebagai contoh, JList mempunyai kaedah setVisibleRowCount() yang mudah yang boleh membantu menentukan saiz pilihan viewport.
  2. Laras Dinamik Saiz Viewport: Tetapkan saiz pilihan viewport berdasarkan maklumat yang diperoleh daripada komponen dalam Langkah 1. Untuk JList, list.setVisibleRowCount( count) boleh digunakan untuk melaraskan ketinggian viewport apabila item ditambah.
  3. Sahkan Semula dan Pek Semula Dialog: Selepas mengubah suai saiz viewport, sahkan semula dan bungkus semula dialog untuk menggunakan perubahan . dlg.revalidate(); dlg.pack(); akan memastikan bahawa dialog menyesuaikan diri dengan saiz pilihan baharu.

Contoh:

Untuk menunjukkan pendekatan ini, pertimbangkan JDialog berikut dengan JList yang menambah secara dinamik barang. Dialog mengembang sehingga mencapai ketinggian maksimum, selepas itu bar skrol muncul.

<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>

Atas ialah kandungan terperinci Bagaimana untuk Melaraskan Saiz JDialog secara Dinamik dengan Had Ketinggian Maksimum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn