2010-09-12 21 views
11

Tengo el siguiente código donde trato de colocar un JLabel en una ubicación personalizada en un JFrame.¿Por qué no setLocation() mueve mi etiqueta?

public class GUI extends JFrame 
{ 

    /** 
    * 
    * @param args 
    */ 
    public static void main(String args[]) 
    { 
     new GUI(); 
    } 
    /** 
    * 
    */ 
    public GUI() 
    { 
     JLabel addLbl = new JLabel("Add: "); 
     add(addLbl); 
     addLbl.setLocation(200, 300); 
     this.setSize(400, 400); 

     // pack(); 
     setVisible(true); 
    } 
} 

Parece que no se mueve hacia donde yo quiero.

Respuesta

25

El problema es que el LayoutManager del panel es establecer la ubicación de la etiqueta para usted.

Lo que hay que hacer es configurar la disposición de nulo:

public GUI() { 
    setLayout(null); 
} 

Esto hará que sea por lo que el marco no trata a la disposición de los componentes por sí mismo.

luego llamar a setBounds(Rectangle) en la etiqueta. Como lo siguiente:

addLbl.setBounds(new Rectangle(new Point(200, 300), addLbl.getPreferredSize())); 

Esto debe colocar el componente donde lo desee.

Sin embargo, si usted no tiene una muy buena razón para exponer los componentes por sí mismo, por lo general es una idea mejor utilizar LayoutManagers a trabajar en su favor.

Here es un gran tutorial sobre cómo empezar a usar LayoutManager s.

Si debe ir sin LayoutManagerhere es un buen tutorial para ir sin uno.

+3

1 Para darle la respuesta a su pregunta, pero dándole a entender que no es una buena manera de hacer las cosas en general – Chimmy

+0

@Chimmy, gracias. – jjnguy

0

Coloque el código de ubicación debajo del marco y funcionará pero si quiere que funcione con seguridad ponga el código de ubicación en un ciclo de ejecución while. Eso es lo que hice para resolverlo y funciona.

Cuestiones relacionadas