Maison >Java >javaDidacticiel >Comment dimensionner dynamiquement un JDialog avec une limite maximale ?
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.
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.
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.
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.
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!