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