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

Tamaño de un botón "setBounds"

Estas en el tema de Tamaño de un botón "setBounds" en el foro de Java en Foros del Web. Hola a todos. Estoy haciendo una interfaz gráfica con Java, y tengo un problema al modificar el tamaño de los botones. Estoy usando el método ...
  #1 (permalink)  
Antiguo 28/11/2009, 11:30
 
Fecha de Ingreso: agosto-2009
Mensajes: 38
Antigüedad: 14 años, 8 meses
Puntos: 1
Tamaño de un botón "setBounds"

Hola a todos.
Estoy haciendo una interfaz gráfica con Java, y tengo un problema al modificar el tamaño de los botones. Estoy usando el método setBounds (int x, int anchura, int y, int altura) pero no me hace ni pizca de caso.

Os pongo el codigo:

Código:
Container contenedor = getContentPane();

//Creamos los botones
         botonGeneraEntrada1 = new JButton ("Entrada1", imagen1);
         botonGeneraEntrada2 = new JButton ("Entrada2", imagen1);

//Creamos los paneles
         panelAnalisis = new JPanel();
      	panelUsuario = new JPanel();
			panelUsuario.setBorder (BorderFactory.createLineBorder(Color.black));
			panelAnalisis1 = new JPanel();
			panelAnalisis1.setBorder (BorderFactory.createLineBorder(Color.black));
			panelAnalisis2 = new JPanel();
			panelAnalisis2.setBorder (BorderFactory.createLineBorder(Color.black));

		
        // Dividimos la interefaz en dos partes, una para el análisis y otra para el usuario
         contenedor.setLayout(new GridLayout(2,1));
      
        // Añadimos los paneles
         contenedor.add (panelAnalisis);
       
      
        // Distribuimos el espacio del análisis y añadimos los componentes
         panelAnalisis.setLayout(new GridLayout(1,2));
         panelAnalisis.add (panelAnalisis1);
			
			panelAnalisis1.setLayout (new GridLayout(3,1)); 
		
			panelAnalisis1.add (botonGeneraEntrada1);
                        botonGeneraEntrada1.setBounds(100, 500, 50, 100); 
Bueno pues la cosa esq el boton ocupa todo lo que le corresponde a su espacio definido por el jpanel "panelanalisis1" y no me hace caso del setBounds

Gracias y un saludo.
  #2 (permalink)  
Antiguo 28/11/2009, 23:29
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Tamaño de un botón "setBounds"

Hola:

Si un panel tiene un layout, ese layout es el que decide el tamaño de los componentes (botones) que hay dentro llamando precisamente a setBounds(), por lo que tus llamadas a setBounds() no tienen efecto.

Una primera solución, pero que seguramente tampoco funcione, es llamar al setPreferredSize() del botón. El layout, antes de llamar a setBounds(), llama a getPreferredSize() para saber qué tamaño desea tener el botón. El problema es que los componente calculan su getPreferredSize() en función de lo que contienen (icono, tamaño de texto, etc), por lo que llamar a setPreferredSize() en la mayoría de los componentes también es inútil.

Si no te funciona, hereda de JButton y redefine el método getPreferredSize(), de forma que devuelva en cada momento el tamaño que tú quieras.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 29/11/2009, 10:14
 
Fecha de Ingreso: octubre-2009
Mensajes: 27
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Tamaño de un botón "setBounds"

bueno soy nuevo y siempre en mis practicas uso setBounds y por lo que veo estas usando esto
Código java:
Ver original
  1. contenedor.setLayout(new GridLayout(2,1));
  2. //Cuando creo que deberias declararlo null
  3. contenedor.setLayout(null);
  #4 (permalink)  
Antiguo 29/11/2009, 20:14
Avatar de erickxls  
Fecha de Ingreso: julio-2009
Ubicación: Lima
Mensajes: 78
Antigüedad: 14 años, 9 meses
Puntos: 3
Respuesta: Tamaño de un botón "setBounds"

como te dijeron arriba si usas un administrador de diseño como gridlayout ya no es necesario el uso de setbounds para que tu le des las coordenadas y el tamaño debes usar un administrador null como lo puse en el post de arriba
  #5 (permalink)  
Antiguo 03/04/2010, 02:34
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Tamaño de un botón "setBounds"

Yo tengo el mismo problema con setBounds y he copiado y modificado lo que comentaban Dureitor y erickxls pero sigo sin conseguir que me funcione.

El código íntegro que he usado es:
Código:
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class Posicionar extends JFrame {
    JPanel panelAnalisis, panelUsuario, panelAnalisis1, panelAnalisis2;
    Container contenedor;
    JButton botonGeneraEntrada1;
    JButton botonGeneraEntrada2;


    public void crearVista() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        contenedor = getContentPane();

        //Creamos los botones
        botonGeneraEntrada1 = new JButton ("Entrada1");
        botonGeneraEntrada2 = new JButton ("Entrada2");


        //Creamos los paneles
        panelAnalisis = new JPanel();

        panelUsuario = new JPanel();
        panelUsuario.setBorder (BorderFactory.createLineBorder(Color.black));

        panelAnalisis1 = new JPanel();
        panelAnalisis1.setBorder (BorderFactory.createLineBorder(Color.black));

        panelAnalisis2 = new JPanel();
        panelAnalisis2.setBorder (BorderFactory.createLineBorder(Color.black));


        // Dividimos la interefaz en dos partes, una para el análisis y otra para el usuario
        contenedor.setLayout(null);

        // Añadimos los paneles
        contenedor.add (panelAnalisis);


        // Distribuimos el espacio del análisis y añadimos los componentes
        panelAnalisis.setLayout(new GridLayout(2,1));
        panelAnalisis.add (panelAnalisis1);

        panelAnalisis1.setLayout (new GridLayout(1,2));
        panelAnalisis1.add (botonGeneraEntrada1);

        botonGeneraEntrada1.setBounds(100, 500, 50, 100);


        this.setTitle("Prueba");
        this.setResizable(true);
        this.setVisible(true);
        this.setSize(512, 256);
    }


    public static void main(String[] args) {
        Posicionar ven;

        ven = new Posicionar();
        ven.crearVista();
    }
}

Al ejecutar me crea el frame pero sin el botón...


Saludos
  #6 (permalink)  
Antiguo 03/04/2010, 08:12
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Tamaño de un botón "setBounds"

A la hora de hacer ventanas hay dos opciones que no son compatibles entre ellas.

1. Fijas tú el tamaño de los componentes
2. Los fija el layout

Si pones layout panelAnalisis1.setLayout (new GridLayout(1,2));, entonces no sirve de nada llamar a setBounds(), ya que el layout también llamará a ese método cada vez que haya que pintar el componente.

Así que o bien pones un layout null (debes ponerlo explicitamente, ya que todos los contenedores tiene un layout por defecto), o bien no llamas a setBounds() y dejas que sea el layout el que decida el tamaño.

Si quieres un GridLayout pero quieres poder "manejarlo" un poco, usa el constructor de GridLayout que tiene parámetros hgag y vgap para dejar márgenes entre los componentes.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 08/04/2010, 09:32
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Tamaño de un botón "setBounds"

Ok, ya lo he entendido y probado ;)

Muchas gracias
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

SíEste tema le ha gustado a 2 personas




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