tutorial fillers example borderlayout java swing netbeans grouplayout

example - swing fillers java



Código autogenerado de GroupLayout en NetBeans (1)

Felicitaciones por abrazar al diseñador de GUI NetBeans como un medio para, y no como un sustituto para, entender Swing. Resumiendo los comentarios,

  • Si bien GroupLayout se diseñó para la generación automática de códigos, se puede usar de manera útil, como se muestra aquí y aquí . También se puede integrar en el enfoque de desarrollo mixto que se sugiere aquí .

  • Los desarrolladores experimentados sugieren sabiamente el aprendizaje de uno o más diseños de terceros populares, como MigLayout , FormLayout o FormLayout , que derivan algo de poder de la aceptación de parámetros de texto legibles por humanos. Veo a GroupLayout en la misma categoría, pero simplemente tengo una interfaz fluida .

  • En su ejemplo, los dos diseños tienen un comportamiento de cambio de tamaño diferente, lo que puede afectar otras opciones. Tenga cuidado con este error común.

Después de casi 4 años en la programación java, decidí aprender a escribir clases de GUI solo, ya que hasta ahora siempre he usado el Editor de GUI de NetBeans (no estoy particularmente orgulloso de ello, pero me ha funcionado bastante bien, evitando que me preocupe por los componentes diseño).

La cuestión es que sigo Cómo usar el tutorial de GroupLayout para obtener más información acerca de este administrador de diseño que encuentro muy poderoso. Ahora hice un pequeño ejemplo yo solo y luego intenté hacer lo mismo en Netbeans GUI Editor y encontré algunas diferencias entre ambos códigos y me gustaría saber si me falta algo o NetBeans simplemente agrega código inútil en la definición de GroupLayout .

Este es mi objetivo:

Este es mi SSCCE :

public static void main(String[] args) { JLabel label = new JLabel("This is a test"); label.setFont(new Font("Segoe UI Semibold", Font.BOLD | Font.ITALIC, 24)); JSeparator separator = new JSeparator(JSeparator.HORIZONTAL); DefaultListModel model = new DefaultListModel(); model.addElement("Apple"); model.addElement("Orange"); model.addElement("Kiwi"); model.addElement("Watermelon"); JList list = new JList(model); list.setPreferredSize(new Dimension(400, 300)); JScrollPane scrollPane = new JScrollPane(); scrollPane.setViewportView(list); JFrame frame = new JFrame("Test"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Container contentPane = frame.getContentPane(); GroupLayout layout = new GroupLayout(contentPane); layout.setAutoCreateContainerGaps(true); contentPane.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(label, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) .addComponent(separator) .addComponent(scrollPane) ); layout.setVerticalGroup( layout.createSequentialGroup() .addComponent(label) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(separator, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(scrollPane, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) ); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); }

Como puede ver, solo he definido un grupo paralelo como grupo horizontal y un grupo secuencial como grupo vertical. Pero Netbeans autogenera este código:

layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(label, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE) .addComponent(separator) .addComponent(scrollPane)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(label) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(scrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 224, Short.MAX_VALUE) .addContainerGap()) );

Como pueden ver, la estructura del grupo es un poco más compleja que la mía. Solo quiero saber si estoy equivocado o si Netbeans agrega innecesariamente más grupos de los necesarios.