So legen Sie die maximale Größe eines JDialogs fest
Problem:
In einem JDialog mit Ein BorderLayout mit einem Bildlaufbereich und Steuerschaltflächen darunter. Das erforderliche Verhalten besteht darin, dass das Dialogfeld seine Größe dynamisch an den Inhalt des Bildlaufbereichs anpasst, bis eine angegebene maximale Größe erreicht ist. Das Festlegen der maximalen Größe mit setMaximumSize() scheint jedoch keine Auswirkung zu haben.
Antwort:
Während die Methode setMaximumSize() tatsächlich die maximale Größe begrenzen sollte Dialog funktioniert es aufgrund der Interaktion zwischen dem BorderLayout, dem Bildlaufbereich und den bevorzugten Größeneinstellungen möglicherweise nicht wie erwartet.
Um dieses Problem zu beheben, sollten Sie den folgenden Ansatz in Betracht ziehen:
Beispiel:
Um diesen Ansatz zu demonstrieren, betrachten Sie den folgenden JDialog mit einer JList, die dynamisch hinzufügt Artikel. Das Dialogfeld wird erweitert, bis es eine maximale Höhe erreicht. Anschließend werden Bildlaufleisten angezeigt.
<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>
Das obige ist der detaillierte Inhalt vonWie passt man die Größe eines JDialogs mit einer maximalen Höhenbeschränkung dynamisch an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!