Maison  >  Article  >  Java  >  Comment redimensionner dynamiquement un JDialog pour s'adapter au contenu avec des contraintes de taille maximale ?

Comment redimensionner dynamiquement un JDialog pour s'adapter au contenu avec des contraintes de taille maximale ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-24 01:29:02125parcourir

How to Dynamically Resize a JDialog to Accommodate Content with Maximum Size Constraints?

Comment définir la taille maximale d'un JDialog

Dans Swing, un JDialog est une fenêtre contextuelle qui peut être utilisée pour afficher informations ou recueillir les commentaires des utilisateurs. Par défaut, la taille maximale d'un JDialog est la taille du moniteur de l'utilisateur. Cependant, il est possible de définir une taille maximale personnalisée à l'aide de la méthode setMaximumSize().

Énoncé du problème

Lorsque vous essayez d'utiliser la méthode setMaximumSize() pour limiter la taille d'un JDialog contenant un volet de défilement et un panneau avec des boutons de validation, la méthode semble n'avoir aucun effet. La méthode de taille préférée, quant à elle, définit la boîte de dialogue à une taille fixe quel que soit son contenu.

Solution

Pour redimensionner dynamiquement un JDialog autour de son contenu vers le haut à une taille maximale spécifiée, il est important de prendre en compte les éléments suivants :

  1. Utilisez la méthode setVisibleRowCount() de composants tels que JList pour fournir des informations utiles pour définir la taille préférée de la fenêtre.
  2. Le paramètre de taille maximale interagit avec le BorderLayout utilisé dans JDialog. L'exemple ci-dessous montre comment définir dynamiquement la taille préférée d'une JList et ajuster la taille du JDialog en conséquence.

Exemple

Le code suivant crée un JDialog avec une JList qui grandit dynamiquement à mesure que des éléments sont ajoutés. Lorsque le nombre d'éléments atteint N, des barres de défilement commencent à apparaître :

<code class="java">import javax.swing.*;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;

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();
                }
            }
        }));
        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) {
        ListDialog pd = new ListDialog();
    }
}</code>

En résumé, définir la taille préférée à l'aide de la méthode setVisibleRowCount() peut aider à obtenir le comportement de redimensionnement dynamique souhaité tout en respectant le choix de l'utilisateur. taille maximale via la méthode setMaximumSize().

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