Heim  >  Artikel  >  Java  >  Wie passt man die Größe eines JDialogs mit einer maximalen Höhenbeschränkung dynamisch an?

Wie passt man die Größe eines JDialogs mit einer maximalen Höhenbeschränkung dynamisch an?

DDD
DDDOriginal
2024-10-24 03:35:30511Durchsuche

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

So legen Sie die maximale Größe eines JDialogs fest

Problem:

In einem JDialog mit Ein BorderLayout mit einem Bildlaufbereich und Steuerschaltflächen darunter. Das erforderliche Verhalten besteht darin, dass das Dialogfeld seine Größe dynamisch an den Inhalt des Bildlaufbereichs anpasst, bis eine angegebene maximale Größe erreicht ist. Das Festlegen der maximalen Größe mit setMaximumSize() scheint jedoch keine Auswirkung zu haben.

Antwort:

Während die Methode setMaximumSize() tatsächlich die maximale Größe begrenzen sollte Dialog funktioniert es aufgrund der Interaktion zwischen dem BorderLayout, dem Bildlaufbereich und den bevorzugten Größeneinstellungen möglicherweise nicht wie erwartet.

Um dieses Problem zu beheben, sollten Sie den folgenden Ansatz in Betracht ziehen:

  1. Nützliche Informationen bereitstellen:Bestimmen Sie, ob eine der Komponenten im Bildlaufbereich Informationen zum Festlegen der bevorzugten Größe des Ansichtsfensters bereitstellen kann.
    JList verfügt beispielsweise über eine praktische setVisibleRowCount()-Methode, die bei der Definition helfen kann die bevorzugte Größe des Ansichtsfensters.
  2. Ansichtsfenstergröße dynamisch anpassen: Legen Sie die bevorzugte Größe des Ansichtsfensters basierend auf den von der Komponente in Schritt 1 erhaltenen Informationen fest. Für JList list.setVisibleRowCount( count) kann verwendet werden, um die Höhe des Ansichtsfensters anzupassen, wenn Elemente hinzugefügt werden.
  3. Dialog erneut validieren und neu packen: Nachdem Sie die Größe des Ansichtsfensters geändert haben, validieren Sie den Dialog erneut und packen Sie ihn neu, um die Änderungen zu übernehmen . dlg.revalidate(); dlg.pack(); stellt sicher, dass sich der Dialog an die neue bevorzugte Größe anpasst.

Beispiel:

Um diesen Ansatz zu demonstrieren, betrachten Sie den folgenden JDialog mit einer JList, die dynamisch hinzufügt Artikel. Das Dialogfeld wird erweitert, bis es eine maximale Höhe erreicht. Anschließend werden Bildlaufleisten angezeigt.

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

Das obige ist der detaillierte Inhalt vonWie passt man die Größe eines JDialogs mit einer maximalen Höhenbeschränkung dynamisch an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn