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.