2008-11-22 8 views

Respuesta

9

Tiene que agregar el botón a otro panel y luego agregarlo al marco.

Resulta que el BorderLayout se expande lo que nunca componente se encuentra en el centro

El código debería tener este aspecto ahora:

Antes

public static void main(String [] args) { 
    JLabel label = new JLabel("Some info"); 
    JButton button = new JButton("Ok"); 

    JFrame frame = ... 

    frame.add(label, BorderLayout.NORTH); 
    frame.add(button , BorderLayout.CENTER); 
    .... 

} 

cambiarlo a algo como esto:

public static void main(String [] args) { 
    JLabel label = new JLabel("Some info"); 
    JButton button = new JButton("Ok"); 
    JPanel panel = new JPanel(); 
    panel.add(button); 

    JFrame frame = ... 

    frame.add(label, BorderLayout.NORTH); 
    frame.add(panel , BorderLayout.CENTER); 
    .... 

} 

Antes/Después

Before http://img372.imageshack.us/img372/2860/beforedl1.png After http://img508.imageshack.us/img508/341/aftergq7.png

+0

¿Cuál es el LayoutManger predeterminado en el Panel? FlowLayout? –

+0

FlowLayout, eso es correcto. – OscarRyz

0

Una vez más :)


    import javax.swing.*; 

    public class TestFrame extends JFrame { 
     public TestFrame() { 
      JLabel label = new JLabel("Some info"); 
      JButton button = new JButton("Ok"); 
      Box b = new Box(BoxLayout.Y_AXIS); 
      b.add(label); 
      b.add(button); 
      getContentPane().add(b); 

     } 
     public static void main(String[] args) { 
      JFrame f = new TestFrame(); 
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      f.setLocationRelativeTo(null); 
      f.setVisible(true); 

     } 
    } 
2

o simplemente utilizar disposición absoluta. Está en Layouts Pallet.

o habilitar con:

frame = new JFrame(); 
... //your code here 

// to set absolute layout. 
frame.getContentPane().setLayout(null); 

De esta manera, se puede colocar libremente el control en cualquier lugar que desee.

Cuestiones relacionadas