Ver Mensaje Individual
  #6 (permalink)  
Antiguo 07/09/2013, 11:20
naggety
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 9 meses
Puntos: 3
Respuesta: JPanel y Layouts para crear un formulario

¡Hola!

Siguiendo tus instrucciones he conseguido llevar a cabo lo que quería, así que muchas gracias por la ayuda.

Pego el código:

Código Java:
Ver original
  1. import java.awt.FlowLayout;
  2. import java.awt.Frame;
  3. import javax.swing.BoxLayout;
  4. import javax.swing.JButton;
  5. import javax.swing.JDialog;
  6. import javax.swing.JLabel;
  7. import javax.swing.JPanel;
  8. import javax.swing.JTextField;
  9. import javax.swing.SpringLayout;
  10. import miProyecto.CustomJPanel;
  11. import miProyecto.CustomJScrollPane;
  12.  
  13. public class CustomDialog extends JDialog {
  14.    
  15.     JTextField inputDescripcion, inputCodigo;
  16.  
  17.     public CustomDialog(String title) {
  18.         // usa el constructor de la super clase
  19.         super ( (Frame)null, title, true );
  20.  
  21.         // configura el layout: BoxLayout
  22.         getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
  23.        
  24.         // crea el JPanel raíz del form, con SpringLayout
  25.         JPanel formRoot = new JPanel();
  26.         SpringLayout layout = new SpringLayout();
  27.         formRoot.setLayout(layout);
  28.  
  29.         // añade primera fila del formulario
  30.         JLabel label = new JLabel ("Código");
  31.         inputCodigo = new JTextField(20);
  32.         formRoot.add(label);
  33.         formRoot.add(inputCodigo);
  34.         layout.putConstraint(SpringLayout.NORTH, label, 10, SpringLayout.NORTH, formRoot);
  35.         layout.putConstraint(SpringLayout.WEST, label, 10, SpringLayout.WEST, formRoot);
  36.         layout.putConstraint(SpringLayout.NORTH, inputCodigo, 5, SpringLayout.NORTH, formRoot);
  37.         layout.putConstraint(SpringLayout.WEST, inputCodigo, 100, SpringLayout.WEST, formRoot);
  38.  
  39.         // añade segunda fila del formulario
  40.         label = new JLabel ("Descripción");
  41.         inputDescripcion = new JTextField(20);
  42.         formRoot.add(label);
  43.         formRoot.add(inputDescripcion);
  44.         layout.putConstraint(SpringLayout.NORTH, label, 40, SpringLayout.NORTH, formRoot);
  45.         layout.putConstraint(SpringLayout.WEST, label, 10, SpringLayout.WEST, formRoot);
  46.         layout.putConstraint(SpringLayout.NORTH, inputDescripcion, 35, SpringLayout.NORTH, formRoot);
  47.         layout.putConstraint(SpringLayout.WEST, inputDescripcion, 100, SpringLayout.WEST, formRoot);
  48.        
  49.         getContentPane().add(formRoot);
  50.        
  51.         // borde inferior del JPane a 20px de la última fila (así el JPanel se adapta a la altura)
  52.         layout.putConstraint(SpringLayout.SOUTH, formRoot, 20, SpringLayout.SOUTH, label);
  53.  
  54.         // añade JScrollPane de altura fija, debajo del formulario
  55.         CustomJScrollPane scrollPane = new CustomJScrollPane();
  56.         getContentPane().add(scrollPane);
  57.  
  58.         // añade los botones de OK y cancel (zona de altura fija)
  59.         CustomJPanel buttonPane = new CustomJPanel();
  60.         buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
  61.         getContentPane().add(buttonPane);
  62.  
  63.         JButton cancelButton = new JButton("Cancelar");
  64.         //cancelButton.setActionCommand("Cancel");
  65.         buttonPane.add(cancelButton);
  66.  
  67.         JButton okButton = new JButton("Aceptar");
  68.         //okButton.setActionCommand("OK");
  69.         buttonPane.add(okButton);
  70.         getRootPane().setDefaultButton(okButton);
  71.  
  72.         // determina tamaño de la ventana, adaptándose en altura al contenido
  73.         setBounds(100, 100, 450, getContentPane().getPreferredSize().height);
  74.        
  75.         // hace visible
  76.         setVisible(true);
  77.        
  78.     }
  79.  
  80. }

Y aquí las clases CustomJPanel y CustomJScrollPane para poder hacer que tengan altura fija (son iguales, pero heredan de distintas clases)

Código Java:
Ver original
  1. import java.awt.Dimension;
  2. import javax.swing.JPanel;
  3.  
  4. public class CustomJPanel extends JPanel {
  5.  
  6.     @Override
  7.     public Dimension getMaximumSize() {
  8.         Dimension superDim = super.getMaximumSize();
  9.         return new Dimension(superDim.width, 60);
  10.     }
  11.  
  12.     @Override
  13.     public Dimension getMinimumSize() {
  14.         Dimension superDim = super.getMinimumSize();
  15.         return new Dimension(superDim.width, 60);
  16.     }
  17.  
  18.     @Override
  19.     public Dimension getPreferredSize() {
  20.         Dimension superDim = super.getPreferredSize();
  21.         return new Dimension(superDim.width, 60);
  22.     }
  23.  
  24. }

Código Java:
Ver original
  1. import java.awt.Dimension;
  2. import javax.swing.JScrollPane;
  3.  
  4. public class CustomJScrollPane extends JScrollPane {
  5.  
  6.     @Override
  7.     public Dimension getMaximumSize() {
  8.         Dimension superDim = super.getMaximumSize();
  9.         return new Dimension(superDim.width, 150);
  10.     }
  11.  
  12.     @Override
  13.     public Dimension getMinimumSize() {
  14.         Dimension superDim = super.getMinimumSize();
  15.         return new Dimension(superDim.width, 150);
  16.     }
  17.  
  18.     @Override
  19.     public Dimension getPreferredSize() {
  20.         Dimension superDim = super.getPreferredSize();
  21.         return new Dimension(superDim.width, 150);
  22.     }
  23.  
  24. }