Comment définir la taille maximale d'un JDialog
Problème :
Dans un JDialog avec un BorderLayout contenant un volet de défilement et des boutons de contrôle en dessous, le comportement requis est que la boîte de dialogue ajuste dynamiquement sa taille pour s'adapter au contenu du volet de défilement jusqu'à ce qu'une taille maximale spécifiée soit atteinte. Cependant, définir la taille maximale à l'aide de setMaximumSize() semble n'avoir aucun effet.
Réponse :
Alors que la méthode setMaximumSize() devrait en effet limiter la taille maximale du Il se peut qu'elle ne fonctionne pas comme prévu en raison de l'interaction entre le BorderLayout, le volet de défilement et les paramètres de taille préférée.
Pour résoudre ce problème, envisagez d'utiliser l'approche suivante :
Exemple :
Pour démontrer cette approche, considérons le JDialog suivant avec une JList qui ajoute dynamiquement articles. La boîte de dialogue s'agrandit jusqu'à atteindre une hauteur maximale, après quoi des barres de défilement apparaissent.
<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>
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!