2016-09-29 3 views
1

Ich habe diese Klasse erstellt, die ein JFrame mit einem Hintergrundbild erstellen. Ich versuche, auf diesem Bild einen Kreis zu zeichnen. Aber ich kann nur das Bild oder die Figur zeigen, der Kreis wird nicht auf dem Bild angezeigt. Ich rufe die Klasse von meiner Hauptstelle an.So malen Sie auf JFrame

Sorry, wenn dies ia newbie Frage :)

package worldofzuul; 

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Graphics; 
import javax.swing.*; 

/** 
* 
* @author JesperJørgensen 
*/ 
public class GraphicsFrame extends JFrame { 

    private JPanel man = new JPanel(); 

    void setupframe() { 
     // Here we create the Frame 
     JFrame frame = new JFrame(); // create the frame 
     frame.setLayout(new BorderLayout()); 
     frame.setResizable(false); 

     frame.setTitle("Zuul the ultimate fridaybar game"); // sets title in top bar of frame 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // what will happens when the frame close (exit) 

     //Here we set the background image (the map which we walk in) 
     ImageIcon icon = new ImageIcon("src/Image/Kort.png"); 
     frame.add(new JLabel(icon)); 

     frame.setContentPane(new DrawPane()); 

     frame.pack(); // sets the size of the frame to fit all objects inside. 
     frame.setVisible(true); // show the frame 

    } 

    class DrawPane extends JPanel { 

     @Override 
     protected void paintComponent(Graphics g) { 
      g.setColor(Color.red); 
      g.fillRect(20, 20, 100, 200); 

     } 
    } 

} 

Antwort

0

Siehe Anmerkungen:

//always post an MCVE 
//see http://stackoverflow.com/help/mcve 
//include imports 
import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Image; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

/** 
* 
* @author JesperJørgensen 
*/ 
public class GraphicsFrame extends JFrame {/*JFrame subclassing is never used*/ 

    //This JPanel is never used 
    private JPanel man = new JPanel(); 
    Image image; 

    void setupframe() { 
     // Here we create the Frame 
     JFrame frame = new JFrame(); // create the frame 
     frame.setSize(500,500); 
     frame.setLayout(new BorderLayout()); 
     frame.setResizable(false); 

     frame.setTitle("Zuul the ultimate fridaybar game"); // sets title in top bar of frame 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // what will happens when the frame close (exit) 

     //initialize image 
     image = new ImageIcon("src/Image/Kort.png").getImage(); 
     //frame.add(new JLabel(image)); 

     frame.setContentPane(new DrawPane()); 

     //if you don't use preferred sizes pack() will set frame to size 0. 
     //frame.pack(); // sets the size of the frame to fit all objects inside. 
     frame.setVisible(true); // show the frame 

    } 

    class DrawPane extends JPanel { 

     @Override 
     protected void paintComponent(Graphics g) { 

      //add draw image to paint 
      g.drawImage(image,0, 0, null); 

      //this draws a rectangle. change to circle if desired 
      g.setColor(Color.red); 
      g.fillRect(20, 20, 100, 200); 

     } 
    } 

    //include main to make it an MCVE 
    public static void main(String args[]) { 

     new GraphicsFrame().setupframe(); 
    } 
} 

die Tatsache, dass diese zu verwenden Klasse erweitert JFrame können Sie es wie folgt implementieren:

public class GraphicsFrame extends JFrame { 

    Image image; 

    //introduce constructor 
    public GraphicsFrame() { 

     setupframe(); 
    } 

    void setupframe() { 

     // no need to create a frame. This class is a JFrame 
     //JFrame frame = new JFrame(); // create the frame 
     setSize(500,500); 
     setLayout(new BorderLayout()); 
     setResizable(false); 

     setTitle("Zuul the ultimate fridaybar game"); // sets title in top bar of frame 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // what will happens when the frame close (exit) 

     //initialize image 
     image = new ImageIcon("src/Image/Kort.png").getImage(); 

     setContentPane(new DrawPane()); 

     setVisible(true); // show the frame 
    } 

    class DrawPane extends JPanel { 

     @Override 
     protected void paintComponent(Graphics g) { 

      //add draw image to paint 
      g.drawImage(image,0, 0, null); 

      //this draws a circle 
      g.setColor(Color.red); 
      g.drawOval(100, 100, 40, 40); 
     } 
    } 

    public static void main(String args[]) { 

     new GraphicsFrame(); 
    } 
} 

Zögern Sie nicht, bei Bedarf nach Erläuterungen zu fragen.

+0

Vielen Dank :) es funktioniert perfekt! – yspede

+0

Ich bin froh, dass es hilft. Siehe http://stackoverflow.com/help/someone-answers – c0der

0

setContentPane entfernt ImageIcon, die so nur sichtbares Element DrawPane seine

+0

okay, gibt es einen anderen Weg, ich kann es tun. Das entfernen Sie die Zeichnung nicht. – yspede

+0

Sie können das Bild direkt wie mit dem Rechteck malen und dann auf das Bild malen. Es ist ein wenig komplizierter, es in einem Satz von Sätzen zu erklären. Hier haben Sie, wie man ein Bild "zeichnet" http://stackoverflow.com/questions/17865465/how-do-i-draw-an-image-to-a-jpanel-or-jframe – Antoniossss

+0

okay danke ich werde es versuchen aus :) – yspede

Verwandte Themen