Maison >Java >javaDidacticiel >Comment dimensionner dynamiquement un JDialog avec une limite maximale ?

Comment dimensionner dynamiquement un JDialog avec une limite maximale ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-24 04:46:30953parcourir

How to Dynamically Size a JDialog with a Maximum Limit?

Définition d'une taille maximale pour un JDialog

Dans le but de limiter les dimensions d'un JDialog, vous pouvez rencontrer un comportement inattendu même après avoir utilisé la méthode setMaximumSize(). Cet article vise à clarifier ce problème et à fournir une solution.

Le problème : limite de taille maximale infructueuse

Lorsque vous travaillez avec un JDialog contenant un volet de défilement et un panneau de taille fixe, l'objectif est pour laisser la boîte de dialogue se développer dynamiquement en fonction de la taille du panneau intégré. Cependant, les tentatives de définition d'une taille maximale à l'aide de setMaximumSize() n'ont aucun effet apparent.

L'explication : taille maximale par défaut

La taille maximale par défaut d'un composant est souvent définie sur la taille du moniteur. En effet, la taille maximale est héritée du composant parent, qui peut avoir défini la taille maximale sur une valeur élevée.

Solution : définir la taille préférée pour le volet de défilement

Pour obtenir la taille souhaitée dimensionnement dynamique dans une limite spécifique, envisagez de définir la taille préférée pour le volet de défilement. Lorsque la taille préférée du volet de défilement est définie, le JDialog s'agrandit en conséquence jusqu'à ce que le seuil soit atteint. À ce stade, des barres de défilement apparaîtront.

Exemple : boîte de dialogue de taille dynamique

L'extrait de code Java suivant montre comment implémenter cette solution à l'aide d'une JList :

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

Ceci Le code ajuste dynamiquement la taille du JDialog en fonction du nombre d'éléments dans la JList. Une fois la taille maximale (dans ce cas, 12 lignes) atteinte, les barres de défilement apparaîtront.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn