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

Posicion relativa de componentes en JFrame?

Estas en el tema de Posicion relativa de componentes en JFrame? en el foro de Java en Foros del Web. Hola, estoy empezando con java, por el momento me he metido solo en modo consola, accesos a base de datos, inserciones, mostrar listados, generar ficheros ...
  #1 (permalink)  
Antiguo 14/04/2009, 10:10
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 19 años, 5 meses
Puntos: 1
Posicion relativa de componentes en JFrame?

Hola, estoy empezando con java, por el momento me he metido solo en modo consola, accesos a base de datos, inserciones, mostrar listados, generar ficheros de texto, movier/copiar/borrar directorios/ficheros etc. y parace que mas o menos es "facil".

Ahora me estoy metiendo en la parte de sacar ventanitas, meterles botones, listas etc, me he hecho una aplicacion que saca los datos de una tabla de la base de datos y los pasa a un JTable, que a su vez lo mete en un JFrame. La aplicacion ejecuta y me muestra los datos.

A partir de ahi, me he creado una clase "Ventana" para no tener que escribir tanto en pantalla para meterle titulos y demas:

Código:
import java.awt.*;
import javax.swing.*;


public class Ventana extends JFrame {
   FlowLayout capa;
   
   public Ventana(String titulo,int largo, int alto,boolean principal)
    {
       this.capa = new FlowLayout(FlowLayout.LEFT, 5,10);
       setTitle(titulo);
       getContentPane().setLayout(this.capa);
       setLocationRelativeTo(null); // centrar en pantalla
       setLocation(400, 200);
       setResizable(false);
       setSize(largo,alto);
       if (principal) setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }



  public void aniadeComponente(Component componente)
  {
       add(componente,BorderLayout.SOUTH);

  }

  public void lanzar()
  {
      setVisible(true);
  }

  public void cerrar()
  {
      setVisible(false);
  }

 
}
Vale, eso funciona, pero al hacer por ejemplo (no pongo todo el codigo de generar tabla y botones):

Código:
Ventana ventana= new Ventana("ventana principal",600,300,true);
ventana1.aniadeComponente(tabla);
ventana1.aniadeComponente(boton1);
ventana1.aniadeComponente(boton2);
me lo muestra todo seguido, sin orden.

Habría alguna forma de pasarle una posicion (x,y) donde quiero que vaya el componente dentro del JFrame (o de la capa)? Algo para modificar el aniadeComponente con AniadeComponente(componente,x,y) ?

EDITO:
Supongo que será cuestion de cambiar el FlowLayout por otro componente que lo soporte, pero no se cual puedo usar....

No me machaqueis mucho si el codigo está mal que ya os digo que llevo 4 dias con java

Un saludo.
__________________
ALOZORRO v5.0 (ahora en .es)

Última edición por Azrael666; 14/04/2009 a las 10:18
  #2 (permalink)  
Antiguo 14/04/2009, 15:00
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Posicion relativa de componentes en JFrame?

Hola:

En java estándar no hay un layout que permita poner los componentes que quieras donde quieras, aunque hay muchos layouts que permiten muchas configuraciones posibles.

Si quieres que los dos botones vayan junto a la tabla (por ejemplo, encima) y no quieres complicarte mucho la vida, lo más fácil es hacer esto:

- Un panel con un FlowLayout al que añades los dos botones.
- La Ventana debe tener un BorderLayout.
- A la ventana, añádele el panel en el NORTH ( ventana1.add(panel, BorderLayout.NORTH) )
- A la ventana, añádele el JTable en el CENTER (ventana1.add(jtable, BorderLayout.CENTER) ).

Además de NORTH, tienes EAST, WEST y SOUTH según quieras los botones a la derecha, izquierda o debajo de la tabla, pero para poner los botones en vertical a la izquierda o derecha, el panel, en vez de FlowLayout debería tener un BoxLayout.

Si no te gusta la chapucilla del panel, puedes usar un GridBagLayout, pero es algo más complejo de comprender su uso.

En plan chapuza total, puedes poner un layout null, con lo que cual tendrías que dar tu tanto la posicion como el tamaño de cada boton y jtable

ventana1.setLayout(null);
boton.setBounds(x,y,ancho,alto)
ventana1.add(boton)

El problema con esto es que no se recolocarán los botones si redimensionas la ventana o puede que te queden mal colocados si arrancas tu aplicación en otro ordenador con otra resolución de pantalla, en otro sistema opertivo, o con otro tipo de fuente, etc.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 06/05/2009, 08:06
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 19 años, 5 meses
Puntos: 1
Respuesta: Posicion relativa de componentes en JFrame?

hola, perdón por la tardanza en responder estos dias no tuve tiempo para estar delante del ordenador; voy a probar a fondo el GridBadLayout a ver que tal va.

Gracias.

Un saludo.
__________________
ALOZORRO v5.0 (ahora en .es)
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 07:55.