Heim >Java >javaLernprogramm >Wie kann ich einen JDialog dynamisch mit einem maximalen Limit dimensionieren?

Wie kann ich einen JDialog dynamisch mit einem maximalen Limit dimensionieren?

Linda Hamilton
Linda HamiltonOriginal
2024-10-24 04:46:30951Durchsuche

How to Dynamically Size a JDialog with a Maximum Limit?

Festlegen einer maximalen Größe für einen JDialog

Bei der Suche nach einer Begrenzung der Abmessungen eines JDialogs kann es zu unerwartetem Verhalten kommen, selbst nachdem Sie die Methode setMaximumSize() verwendet haben. Ziel dieses Artikels ist es, dieses Problem zu klären und eine Lösung bereitzustellen.

Das Problem: Fehlerhafte maximale Größenbeschränkung

Beim Arbeiten mit einem JDialog, der einen Bildlaufbereich und ein Panel mit fester Größe enthält, lautet das Ziel um den Dialog basierend auf der Größe des eingebetteten Panels dynamisch erweitern zu lassen. Versuche, mit setMaximumSize() eine maximale Größe festzulegen, haben jedoch keine offensichtliche Wirkung.

Die Erklärung: Standardmäßige maximale Größe

Die standardmäßige maximale Größe einer Komponente wird häufig auf die Größe der festgelegt Monitor. Dies liegt daran, dass die maximale Größe von der übergeordneten Komponente geerbt wird, die die maximale Größe möglicherweise auf einen großen Wert festgelegt hat.

Lösung: Bevorzugte Größe für den Bildlaufbereich festlegen

Um das Gewünschte zu erreichen Dynamische Größenanpassung innerhalb einer bestimmten Grenze. Erwägen Sie, die bevorzugte Größe für den Bildlaufbereich festzulegen. Wenn die bevorzugte Größe des Bildlaufbereichs festgelegt ist, wird der JDialog entsprechend erweitert, bis der Schwellenwert erreicht ist. An diesem Punkt werden Bildlaufleisten angezeigt.

Beispiel: Dialog mit dynamischer Größe

Der folgende Java-Codeausschnitt zeigt, wie diese Lösung mithilfe einer JList implementiert wird:

<code class="java">import java.awt.BorderLayout;
import java.awt.EventQueue;
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 {

    private static final int N = 12;
    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;

    public ListDialog() {
        JPanel panel = new JPanel();
        panel.add(new JButton(new AbstractAction("Add") {

            @Override
            public void actionPerformed(ActionEvent e) {
                append();
                if (count <= N) {
                    list.setVisibleRowCount(count);
                    dlg.pack();
                }
            }
        }));
        for (int i = 0; i < N - 2; i++) {
            this.append();
        }
        list.setVisibleRowCount(N - 2);
        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 " + count++);
        list.ensureIndexIsVisible(count - 1);
    }

    public static void main(String[] a_args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                ListDialog pd = new ListDialog();
            }
        });
    }
}</code>

Dies Code passt die Größe des JDialog dynamisch basierend auf der Anzahl der Elemente in der JList an. Sobald die maximale Größe (in diesem Fall 12 Zeilen) erreicht ist, werden die Bildlaufleisten angezeigt.

Das obige ist der detaillierte Inhalt vonWie kann ich einen JDialog dynamisch mit einem maximalen Limit dimensionieren?. 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