2013-07-25 13 views
11

Come faccio a disegnare un'immagine su JPanel o JFrame, ho già letto il tutorial di oracle su questo, ma non riesco a farlo bene. Ho bisogno dell'immagine "BeachRoad.png" da visualizzare su un insieme specifico di coordinate. Ecco cosa ho finora.Come si disegna un'immagine su JPanel o JFrame?

public class Level1 extends JFrame implements ActionListener { 

static JLayeredPane EverythingButPlayer; 
static Level1 l1; 

public Level1() { 
    EverythingButPlayer = new JLayeredPane(); 

    BufferedImage img = null; 
    try { 
     img = ImageIO.read(new File("BeachRoad.png")); 
    } catch (IOException e) { 
    } 
    Graphics g = img.getGraphics(); 
    g.drawImage(img,0, 0, EverythingButPlayer); 


    this.add(EverythingButPlayer); 
} 

E nel Main(),

 l1 = new Level1(); 
    l1.setTitle("poop"); 
    l1.setSize(1920, 1080); 
    l1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    l1.setVisible(true); 

Grazie in anticipo!

+1

il codice è un modo diretto per i problemi o come odiare Linguaggi di programmazione (whatever.getGraphics()) 1. si prega di leggere Oracle esercitazione [Lavorare con Imag es] (http://docs.oracle.com/javase/tutorial/2d/images/index.html), cerca qui nei post contrassegnati da 'paintComponent' o' JLabel' con 'Icon' /' ImageIcon' – mKorbel

+0

Ho già ho affermato nella prima parte della domanda che ho letto Oracles Tutorial su Lavorare con le immagini. E non riesco proprio a capire la prima cosa che hai detto ... – Saucymeatman

+0

vedi risposta di @tieTYT, per iniziare con paintComponent (dimenticato di paint()) e JPanel, è richiesto per sovrascrivere getPreferredSize (dimenticato di JFrame.setSize()) per JPanel e poi chiama JFrame.pack() (cerca qui, metà delle domande su Paiting Image, Shapes, Line) – mKorbel

risposta

16

Prova questo:

package com.sandbox; 

import javax.imageio.ImageIO; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.WindowConstants; 
import java.awt.Graphics; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

public class SwingSandbox { 

    public static void main(String[] args) throws IOException { 
     JFrame frame = buildFrame(); 

     final BufferedImage image = ImageIO.read(new File("C:\\Projects\\MavenSandbox\\src\\main\\resources\\img.jpg")); 

     JPanel pane = new JPanel() { 
      @Override 
      protected void paintComponent(Graphics g) { 
       super.paintComponent(g); 
       g.drawImage(image, 0, 0, null); 
      } 
     }; 


     frame.add(pane); 
    } 


    private static JFrame buildFrame() { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.setSize(200, 200); 
     frame.setVisible(true); 
     return frame; 
    } 


} 
+1

Grazie mille amico! Proprio quello che stavo cercando. Sono molto nuovo nell'usare le immagini in java ed è stato completamente perso. – Saucymeatman

+0

Puoi mostrare un esempio di come si chiamerebbe il metodo paintComponent? Sembra che sarebbe pane.paintComponent(), ma non capisco quale argomento sarebbe passato ad esso per g. – redeagle47

+0

@ redeagle47 questa è una buona domanda ma sfortunatamente non conosco la risposta (o l'ho dimenticato). Questo è semplicemente un contratto che prometti a Swing che applichi. I dettagli di come ottieni che 'g' provengono dagli interni di Swing, non da alcun codice che scrivi. Swing rende un 'JPanel' e chiama' paintComponent' quando lo fa. Se si sostituisce questo metodo, verrà disegnato a modo tuo invece del modo predefinito. –

3

Ci sono un sacco di metodi, ma ho sempre la priorità alla paint(Graphics g) di un JComponent e utilizzare g.drawImage(...)

edit: stavo facendo un campione, ma tieTYT fatto perfettamente, guarda la sua risposta :)

Problemi correlati