Foro sobre Java SE > GridBagLayout
Este es el código que uso para centrar una imagen en un JPanel.
Por cierto, no se debe usar paint, sino paintComponent cuando esté disponible:
http://www.oracle.com/technetwork/java/painting-140037.html
"Swing programs should override paintComponent() instead of overriding paint()."
public void paintComponent(final Graphics graphics) {
super.paintComponent(graphics);
final Graphics2D g2D = (Graphics2D) graphics;
final int height = getHeight();
final int width = getWidth();
final Insets insets = getInsets();
final int panelWidth = width - insets.left - insets.right;
final int panelHeigth = height - insets.top - insets.bottom;
final int imgWidthC = image.getWidth(null);
final int imgHeightC = image.getHeight(null);
g2D.drawImage(image, (panelWidth - imgWidthC) / 2 + insets.left, (panelHeigth - imgHeightC) / 2 + insets.top, imgWidthC, imgHeightC, this);
}
Buen día, choses use su código para centrar la imagen en los panel pero no carga la imagen en el JFrame de la clase que muestra las imágenes tengo hecha la clase de esta manera:
public class ClasePrueba extends JFrame{
JPanel p;
GridBagConstraints c;
Container container;
public ClasePrueba(){
container = this.getContentPane();
container.setLayout(new GridBagLayout());
((JPanel)container).setBorder(
BorderFactory.createTitledBorder("METODOS DE TUBERIAS SIMPLES"));
c = new GridBagConstraints();
this.setBounds(100,100, 400, 400);
container.setLayout(new GridBagLayout());
//------------------------------------------
c.fill = GridBagConstraints.HORIZONTAL;
c.weighty = 1.0;
c.weightx = 1.0;
c.gridx = 0;
c.gridy = 1;
c.gridwidth = 1;
c.gridheight = 1;
container.add(new ImagenMetodo(), c);
this.setVisible(true);
}
public static void main (String arg[]){
new ClasePrueba();
}
El problema es que como mencione antes las imágenes se muestran pequeñas o la altura del Jpanel es pequeña. Donde esta mi error ¿Cuando cargo la imagen al JPanel o cuando la cargo el el contenedor con el GridBagLayout?
¿No carga la imagen, o sí la carga, pero es pequeña?.
Con mi método, la imagen se adapta a las dimensiones del JPanel, y la centra.
Si carga las imágenes, pero son pequeñas, entonces el JPanel es pequeño.
Si no las carga, el problema está en otro lugar.
¿Se lanza alguna excepción en ejecución?
Ninguna excepción, carga pero las imágenes salen pequeñas, la aplicación consiste de que cada vez que La clase que muestra las imágenes recibe una nueva imagen divide el JFrame y las acopla, probé hacerlo con GridLayout pero las casillas o divisiones de estas no son flexibles y lo que necesito es que las divisiones del JFrame sean distintas. Investigando encontré GridBagLayout. El problema es que cuando los carga en sus respectivas casillas, las imágenes se muestran muy pequeñas; creo que el problema es el manejo de GridBagLayout, porque le cambio el layout a la clase que muestra las imágenes y estas se muestran bien ocupando todo el espacio de las divisiones. Muchas Gracias por su método.
Saludos....
Diseñar un GridBagLayout "a mano" es muy complejo. Incluso con el Editor Gráfico de UI de NetBeans, y su editor gráfico de GridBagLayout no es nada sencillo.
Por si te sirve: http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html
Pero lo más recomendable sería que usases un editor gráfico.
Muchas gracias por su ayuda, tomare su sugerencia, el problema ya lo solucione usando solo paneles con diferentes layout aunque no quedo como yo quería :). Es buen comienzo en esto lo de la programación.. Gracias
Saludos.
Buen día, Tengo una clase que carga imágenes y otra que las muestra en un JFrame, en el cual use un Contenedor con un GridBagLayout para acomodar las imágenes usando GridBagConstraints. El problema es que las imagenes salen muy pequeñas. cuando dibujo las imagenes uso Dimension. ¿Cual seria el problema o que estaría haciendo mal?
public class CargarImagen extends JPanel{
ImageIcon imagen;
Image ima;
private BufferedImage image=null;
URL r;
public CargarImagen(){
this. setSize(300,500);
r= this.getClass().getResource("imagen1.jpg");
imagen=new ImageIcon(r);
ima=imagen.getImage();
}
public void paint(Graphics g){
Dimension alto = getSize();
System.out.println("llega al paint border");
g.drawImage(ima,0, 0, alto.width, alto.height, null);
setOpaque(false);
}