He Panel principal y voy a agregar componentes de forma dinámica en que uno.

Panel principal ha GridLayout limitado a 3 columnas y 0 rows (0 filas permitirá filas a crecer infinitamente), pero el problema es que quiero que todos los componentes de tamaño fijo o componente preferente tamaño.

Puedo usar otro diseño si cumple con mis necesidades… pero por ahora sólo GridLayout me permite limitar las columnas de a 3…

…Me olvidé de mencionar, el Panel Principal se agrega en JScrollpane, por lo que puede desplazarse verticalmente.

  • I can use other layout if it meets my requirements... – sí, eso es lo que usted necesita hacer. Un GridLayout siempre cambia el tamaño de los componentes. Pruebe con un GridBagLayout.
  • Es difícil saber a partir de su descripción, pero yo recomiendo usar algo como GridBagLayout o incluso FlowLayout que ambos (cuando se ha configurado la derecha) honrar a los componentes de tamaño preferido si se tiene el espacio para hacerlo…
  • Cómo limitar el GridBagLayout a 3 columnas?
  • Cómo limitar FlowLayout a 3 columnas?
  • Tendrías que hacerlo tú mismo. GridLayout se desborde a otra fila, si se agrega más de 3 componentes de cualquier manera…
  • No me ayuda mucho, pero me obligó a experimentar más con FlowLayout. Así FlowLayout y dinámica de cambio de tamaño Principal del Panel de altura con setPrefferedSize(), resuelto el problema!

InformationsquelleAutor jovanMeshkov | 2013-05-04

1 Comentario

  1. 2

    Una manera de hacer esto es utilizar JPanels. GridLayout estirar sus componentes, pero si usted ajusta el componente en un JPanel, entonces el JPanel se estira. Y desde JPanel utiliza FlowLayout, que no estirar los componentes, los componentes se mantienen en su tamaño preferido.

    He aquí un ejemplo de uso de JButton. Observe cómo puedo agregar a un (nuevo) JPanel cada bucle, luego añadir el panel para el diseño de cuadrícula.

      import javax.swing.*;
    
      public class GridLayout {
         public static void main( String[] args ) {
            SwingUtilities.invokeLater( new Runnable() {
               public void run() {
    
                  JFrame frame = new JFrame();
    
                  frame.setLayout( new java.awt.GridLayout( 0, 3 ) );
                  for( int i = 0; i < 21; i++ ) {
                     JPanel panel = new JPanel();  //Make a new panel
                     JButton button = new JButton( "Button "+i );
                     panel.add( button );  //add the button to the panel...
                     frame.add( panel );   //...then add the panel to the layout
                  }
                  frame.pack();
                  frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
                  frame.setLocationRelativeTo( null );
                  frame.setVisible( true );
               }
            } );
         }
      }

Dejar respuesta

Please enter your comment!
Please enter your name here