Foros del Web » Programación para mayores de 30 ;) » Java »

setBounds ¿fallo?

Estas en el tema de setBounds ¿fallo? en el foro de Java en Foros del Web. Hola, Estoy haciendo una aplicación que inicialmente pide al usuario que elija el tamaño de la ventana con la que va a trabajar. Una vez ...
  #1 (permalink)  
Antiguo 10/04/2010, 11:17
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
setBounds ¿fallo?

Hola,
Estoy haciendo una aplicación que inicialmente pide al usuario que elija el tamaño de la ventana con la que va a trabajar. Una vez seleccionada, se carga la ventana y todos los elementos.

Pues bien, para colocar un JLabel centrado en la ventana

El tamaño de la ventana (dimension) es un parámetro de entrada por lo que no hace falta hacer:
Código:
Dimension dimension = this.getSize ();
Declaro el JLabel que quiero centrar en la coordenada "x"
Código:
JLabel login = new JLabel ("ACCESO");
Para posicionar el jLabel en la coordenada "x" hago:
Código:
int anchura = (dimension.width - login.getText().length()) / 2;
Para posicionar el jLabel en la coordenada "y" hago:
Código:
int altura = dimension.height / 4;
Para colocarlo en la pantalla hago:
l
Código:
ogin.setBounds(anchura, altura, 51, 25);
Pues bien, resulta que el JLabel no está centrado en "x" con respecto a la ventana, vamos que, no hay la misma distancia del extremo izquierdo a "A" que de "O" al extremo derecho.

Mi pregunta es ¿Qué estoy haciendo mal?

Un saludo
  #2 (permalink)  
Antiguo 10/04/2010, 11:22
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: setBounds ¿fallo?

¿Y por que no usas simplemente el layout adecuado? Con un BorderLayout y poniendo el Label en CENTER -> centrado automático.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 10/04/2010, 11:28
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: setBounds ¿fallo?

Es la opción que voy a hacer pero es que me pica la curiosidad de por qué no puedo centrarlo yo a pelo...
  #4 (permalink)  
Antiguo 10/04/2010, 12:05
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: setBounds ¿fallo?

Hombre, asi por encima...

No entiendo por que crees que

Cita:
int anchura = (dimension.width - login.getText().length()) / 2;
te ha de devolver la medida donde poner el label. Ahí mismo estás mezclando longitud de texto(número de letras) con pixels... No es coherente.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 10/04/2010, 17:21
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: setBounds ¿fallo?

Si a la anchura de la ventana (dimension.width) le resto lo que ocupa el jLabel (login.getText().length()) y todo lo divido entre 2, me debería dar la posición exacta donde poner el jlabel para que esté perfectamente centrado.

Pero me acabas de dejar tirado cuando has dicho
Cita:
Ahí mismo estás mezclando longitud de texto(número de letras) con pixels
¿Cómo puedo pasarlo a las mismas unidades para solucionar el problema?
  #6 (permalink)  
Antiguo 11/04/2010, 13:17
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: setBounds ¿fallo?

La anchura del JLabel se la tendrías que preguntar al JLabel, por que para calcularla "manualmente" tendrías que tener en cuenta el texto, el tamaño de ese texto en la fuente que usa el JLabel, los margenes entre el texto y el JLabel, la anchura del borde del JLabel (si tiene)...

Vamos, en vez de ir por la parte del texto, ir por getPreferredSize().width es más corto. Usar getWidth() no funciona por que no la sabe hasta que la pinta.

S!

PD: Y otra cosa, ten en cuenta que cuando le dices setBounds() a un componente no tienes por que decirle necesarimente "el centro" donde se ha de colocar. Consulta el API para ver exactamente lo que le estás diciendo .
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.

Etiquetas: fallo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:30.