ventana una ponerle poner insertar imagen formulario fondo como java image background set

ponerle - Cómo establecer una imagen de fondo en Java?



jpanel background image (4)

La respuesta variará levemente dependiendo de si la aplicación o applet usa AWT o Swing .

(Básicamente, las clases que comienzan con J como JApplet y JFrame son Swing, y Applet y Frame son AWT).

En cualquier caso, los pasos básicos serían:

  1. Dibuja o carga una imagen en un objeto Image .
  2. Dibuje la imagen de fondo en el evento de pintura del Component que desea dibujar el fondo.

Paso 1. Cargar la imagen puede ser mediante el uso de la clase Toolkit o por la clase ImageIO .

El método Toolkit.createImage se puede utilizar para cargar una Image desde una ubicación especificada en una String :

Image img = Toolkit.getDefaultToolkit().createImage("background.jpg");

Del mismo modo, ImageIO se puede utilizar:

Image img = ImageIO.read(new File("background.jpg");

Paso 2. El método de pintura para el Component que debería obtener el fondo tendrá que ser anulado y pintar la Image en el componente.

Para AWT, el método para anular es el método de paint , y usa el método drawImage del objeto Graphics que se entrega al método de paint :

public void paint(Graphics g) { // Draw the previously loaded image to Component. g.drawImage(img, 0, 0, null); // Draw sprites, and other things. // .... }

Para Swing, el método para anular es el método paintComponent del JComponent , y dibujar la Image como con lo que se hizo en AWT.

public void paintComponent(Graphics g) {     // Draw the previously loaded image to Component.     g.drawImage(img, 0, 0, null);     // Draw sprites, and other things.     // .... }

Ejemplo de componente simple

Aquí hay un Panel que carga un archivo de imagen cuando se crea una instancia, y dibuja esa imagen sobre sí mismo:

class BackgroundPanel extends Panel { // The Image to store the background image in. Image img; public BackgroundPanel() { // Loads the background image and stores in img object. img = Toolkit.getDefaultToolkit().createImage("background.jpg"); } public void paint(Graphics g) { // Draws the img to the BackgroundPanel. g.drawImage(img, 0, 0, null); } }

Para más información sobre pintura:

Estoy desarrollando un juego de plataforma simple usando Java usando BlueJ como el IDE. En este momento tengo sprites jugador / enemigo, plataformas y otros elementos del juego dibujados usando polígonos y formas simples. Eventualmente espero reemplazarlos con imágenes reales.

Por ahora me gustaría saber cuál es la solución más simple para configurar una imagen (ya sea de URL o de fuente local) como el ''fondo'' de mi ventana / lienzo de juego?

Apreciaría si no es algo largo o complejo ya que mis habilidades de programación no son muy buenas y quiero que mi programa sea lo más simple posible. Por favor, proporcione códigos de ejemplo con comentarios para elaborar sobre su función, y también si es en su propia clase, cómo llamar a los métodos relevantes utilizados por ella en otras clases.

Muchas gracias.


Primero crea una nueva clase que amplíe la clase WorldView . Llamé a mi nueva clase Background . En esta nueva clase, importe todos los paquetes Java que necesite para anular el método paintBackground . Esto debería ser:

import city.soi.platform.*; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.ImageObserver; import javax.swing.ImageIcon; import java.awt.geom.AffineTransform;

Luego del nombre de la clase, asegúrese de que dice extiende WorldView . Algo como esto:

public class Background extends WorldView

Luego declara el juego de variables de tipo Game y una variable de imagen de tipo Image algo así:

private Game game; private Image image;

Luego, en el constructor de esta clase, asegúrate de que el juego de tipo Game esté en la firma del constructor y de que en la llamada a super tendrás que inicializar WorldView , inicializar el juego e inicializar las variables de la imagen, algo como esto:

super(game.getCurrentLevel().getWorld(), game.getWidth(), game.getHeight()); this.game = game; bg = (new ImageIcon("lol.png")).getImage();

Luego, anula el método paintBackground exactamente de la misma manera que lo hizo cuando anuló el método de paint en la clase Player . Solo así:

public void paintBackground(Graphics2D g) { float x = getX(); float y = getY(); AffineTransform transform = AffineTransform.getTranslateInstance(x,y); g.drawImage(bg, transform, game.getView()); }

Ahora, finalmente, tienes que declarar una referencia de nivel de clase a la nueva clase que acabas de crear en la clase Game e iniciar esto en el constructor Game , algo como esto:

private Background image; And in the Game constructor: image = new Background(this);

¡Por último, todo lo que tienes que hacer es agregar el fondo al marco! Eso es lo que estoy seguro de que todos estábamos desaparecidos. Para hacer eso, tienes que hacer algo como esto después de frame se haya declarado el frame variable:

frame.add(image);

Asegúrese de agregar este código justo antes de frame.pack(); . ¡También asegúrese de usar una imagen de fondo que no sea demasiado grande!

Ahora eso es todo! Me he dado cuenta de que los motores de juego pueden manejar formatos de imagen JPEG y PNG, pero también pueden admitir otros. Aunque esto ayuda a incluir una imagen de fondo en tu juego, ¡no es perfecto! Porque una vez que pasas al siguiente nivel, todas tus plataformas y sprites son invisibles y todo lo que puedes ver es tu imagen de fondo y cualquier JLabels / Jbuttons que hayas incluido en el juego.


O prueba esto;)

try { this.setContentPane( new JLabel(new ImageIcon(ImageIO.read(new File("your_file.jpeg"))))); } catch (IOException e) {};


El Path es lo único de lo que realmente tienes que preocuparte si eres nuevo en Java. Debe arrastrar su imagen al archivo principal del proyecto y aparecerá en la parte inferior de la lista.

Entonces la ruta del archivo es bastante directa. Este código va al constructor de la clase.

img = Toolkit.getDefaultToolkit().createImage("/home/ben/workspace/CS2/Background.jpg");

CS2 es el nombre de mi proyecto, y todo lo anterior conduce al espacio de trabajo.