tipos son los layouts fillers examples cuáles java swing layout

java - son - Diseño variable en Swing



swing fillers java (5)

¿Cómo harías para obtener una GUI de aspecto decente cuando no sabes cuántos componentes tendrás y qué tan grandes serán?

Un usuario, por ejemplo, ingresa cuántos campos de texto quiere y cuáles de esos campos de texto están agrupados en paneles delimitados y el programa genera esto.

He estado usando GridLayout, pero el problema es que hace que todas las celdas tengan el mismo ancho y alto, lo que está bien cuando todos los componentes tienen el mismo tamaño, pero cuando yo, por ejemplo, tengo un campo de texto y un panel con borde con múltiples campos, ya sea el campo de texto se estira o el panel se aprieta.

Me gustaría que todos los componentes tuvieran su tamaño mínimo, pero aún así, se puede usar.

Ejemplo de cómo es ahora, usando GridLayout , todos los campos son normales, JTextFields de una sola línea donde el panel titulado fecha está completamente comprimido (tiene tres campos) y los campos de primer nivel son demasiado grandes. Alguien tiene punteros?


El tamaño mínimo en AWT y Swing generalmente no tiene sentido. Sugiero agregar un panel para delegar el tamaño mínimo al tamaño preferido original, y posiblemente agregar un poco al nuevo tamaño preferido. En GridBagLayout agrega pesas donde quieras espacio adicional para el tamaño normal. Como menciona Durandal, aparecer barras de desplazamiento alrededor de la ventana del nivel superior supera el diseño o la salida de la pantalla (estoy escribiendo esto en una netbook, así que sé sobre ventanas más grandes que la pantalla).


Sí, MiGLayout es bueno. Puedes hacer casi cualquier cosa con eso.


Su objetivo general: "tamaños de componentes utilizables" choca con "número desconocido". Haga el número lo suficientemente grande y no se ajustará a ninguna pantalla.

Overthink si no estaría mejor con el uso de JTables (las celdas pueden ser editables) en conjunción con un JScrollPanel. Si quiere / debe mantener su enfoque de generar componentes, coloque todo el JPanel que contiene sus componentes en un JScrollPane, de esa manera los componentes no se comprimirán demasiado.


Yo miraría miglayout. Es mucho más útil que cualquiera de los administradores de diseño incorporados.


MiGLayout tiene un gran atractivo, pero BoxLayout es una alternativa.

import java.awt.*; import java.util.List; import java.util.ArrayList; import javax.swing.*; public class BoxTest extends JPanel { private List<JTextField> fields = new ArrayList<JTextField>(); public BoxTest() { this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); this.add(createPane(3, "One ", Color.red)); this.add(createPane(3, "Two ", Color.green)); this.add(createPane(10, "Three ", Color.blue)); } private JPanel createPane(int n, String s, Color c) { JPanel outer = new JPanel(); outer.setLayout(new BoxLayout(outer, BoxLayout.Y_AXIS)); outer.setBorder(BorderFactory.createLineBorder(c, 2)); for (int i = 0; i < n; i++) { JPanel inner = new JPanel(); inner.setLayout(new BoxLayout(inner, BoxLayout.X_AXIS)); JLabel label = new JLabel(s + i + ":", JLabel.RIGHT); label.setPreferredSize(new Dimension(80, 32)); inner.add(label); JTextField tf = new JTextField("!", 32); inner.add(tf); fields.add(tf); outer.add(inner); } return outer; } private void display() { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JScrollPane jsp = new JScrollPane(this, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); this.validate(); Dimension d = this.getPreferredSize(); d.height /= 2; jsp.getViewport().setPreferredSize(d); jsp.getVerticalScrollBar().setUnitIncrement( this.getPreferredSize().height / fields.size()); f.add(jsp); f.pack(); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new BoxTest().display(); } }); } }