una poner para insertar imagen fondo contenedor como codigo cargar java swing background jpanel paintcomponent

java - poner - Tener imágenes como fondo de JPanel



jpanel background image (3)

¿Por qué no hacer una sola clase que toma una Image ?

public class ImagePane extends JPanel { private Image image; public ImagePane(Image image) { this.image = image; } @Override public Dimension getPreferredSize() { return image == null ? new Dimension(0, 0) : new Dimension(image.getWidth(this), image.getHeight(this)); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); g2d.drawImage(image, 0, 0, this); g2d.dispose(); } }

Incluso podría dar pistas sobre dónde debería pintarse.

De esta forma, puedes simplemente crear una instancia cuando lo necesites

Actualizado

La otra pregunta es, ¿por qué?

Solo podría usar un JLabel que pintará el ícono por usted sin ningún trabajo adicional ...

Vea Cómo usar las etiquetas para más detalles ...

En realidad, esta es una mala idea, ya que JLabel NO usa sus componentes secundarios al calcular su tamaño preferido, solo usa el tamaño de la imagen y las propiedades del texto al determinar su tamaño preferido, esto puede ocasionar que el componente tenga un tamaño incorrecto

Soy nuevo en Java y actualmente estoy creando un juego con gráficos. Tengo esta clase que se extiende desde JFrame . En esta clase, tengo muchos JPanel que necesitan una imagen como fondo. Como sé, para poder pintar imágenes en el JPanel, necesito tener una clase separada que se extienda desde JPanel y el método paintComponent esa clase hará el trabajo. Pero no quiero hacer clases separadas para cada JPanel , tengo demasiados; y con el hecho de que solo me preocupan los antecedentes. ¿Cómo puedo hacer esto? ¿es con una clase interna anónima? ¿Cómo?

Para una mejor comprensión, proporcioné un código:

public GUI extends JFrame { private JPanel x; ... public GUI() { x = new JPanel(); // put an image background to x }


No tienes que hacer otra clase para eso? Usted podría simplemente hacer:

x = new JPanel(){ public void paintComponent(Graphics g){ super.paintComponent(g); //draw background image } };


Puedes hacer esto en una sola línea:

panelInstance.add(new JLabel(new ImageIcon(ImageIO.read(new File("Image URL")))));

Espero que funcione para ti.