Grafik zeichnen

BDG

Aktives Mitglied
Hey Leute,
kann mir jemand sagen, wie ich auf dem besten Weg eine Grfik in Java zeichne ? ich will ein Jump and Run Spiel programmieren, mit Editor und so.
Hab das schon in c# gemacht, aber jetzt will ich das gleiche in Java versuchen ^^
Also kann mir jemand sagen wie ich einfach eine Grafik zeichne ?
So ganz normal ? Die Figur, die Tiles etc. ?

MfG, BDG
 
A

AWTSwing

Gast
Kommt drauf an ob du mit AWT oder Swing arbeitest (wobei ich dir Swing dringend empfehlen würde).
In AWT erbst du du Component und überschreibst public void pain(Graphics) und zeichnest dann auf das Graphics-Objekt mit den verfügbaren Methoden.
Bei Swing analog : public void paintComponent(Graphics) und von JComponent erben.
 

BDG

Aktives Mitglied
Oke. Hast du irgendwelche Beispiele ? Wie ich Grafiken lade ? Und wie ich die dann wo zeichne ?
Oder irgendwelche Links ?


Und ja, ich wollte es mit Swing machen ^^
 

André Uhres

Top Contributor

BDG

Aktives Mitglied
Oh man... Ich wusste ja schon immer das Java nicht gerade unkompliziert ist, aber das ich es in 2 Jahren nicht schaffe eine Grafik zu zeichnen ?!!!!
in den Links wird ja nur gezeigt wie man Sachen zeichnet also Kreise und Frbverläufe und so...
Aber ich will wissen wie Ich richtige Bilder zeichne ^^
 

Jodo

Aktives Mitglied
Das ist auch nicht kompliziert sondern benötigt, abgesehen vom Erstellen des Fensters mit Swing, genau 3 Zeilen Code.

Schau dir mal [JAPI]http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/Graphics.html[/JAPI] und [JAPI]http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/Toolkit.html[/JAPI] an.

Sollte in den nächsten 2 Jahren machbar sein ;)
 

Jodo

Aktives Mitglied
Falls du nicht schon selbst danach gesucht und es gefunden hast..

[JAPI]http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html[/JAPI] und [JAPI]http://docs.oracle.com/javase/7/docs/api/java/awt/Toolkit.html[/JAPI]
 

BDG

Aktives Mitglied
Naja... So wies aussieht kommt das mit den 2 Jahren noch hin...
Denn da habe ich zwar eine Methode, die aussieht als whäre sie hilfreich (drawImage), aber die ganzen Parameter bring ich nicht zusammen... Hat nicht jemand dieses besagten 3 Zeilen Code zufällig grad da ? ;D
 

BDG

Aktives Mitglied
ich hab jetzt ein bisschen, aber es funktioniert noch nicht...
bei der paintComponent Methode sagt er immer :
The method paintComponent(Graphics) of type Game1 must override or implement a supertype method

^^
So sieht es bis jetzt aus :

Java:
import java.awt.*;

import javax.swing.*;

public class Game1 extends JFrame
{
	private Image image;
	
	
      public Game1()
      {
              super("Fenster");
              setSize(300,300);
              setLocation(300,300);
              setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              setVisible(true);
              
              LoadImage();
      }

      @Override
      protected void paintComponent( Graphics g )
      {  
    	  

    	  
      }
      
       public static void main(String[] args)
       {
    	   
           Game1 g = new Game1();
               
       }
       
       public  void LoadImage()
       {
    	   image = Toolkit.getDefaultToolkit().getImage("Bomber1.png");
    	      	   
       }
       
       
       

}
 
S

SlaterB

Gast
da wurden einige Links zu Tutorials gepostet mit sicher perfekten fertigen Beispielprogrammen
und du kommst mit einer hoffentlich nirgendwo auf der Welt schon mal vorgeschlagenen Variante und möchtest nun die Fehler korrigiert haben?
das ist doch nicht gerade das optimale Vorgehen, oder?
 

Jodo

Aktives Mitglied
Eine Methode, die es in der Superklasse nicht gibt lässt sich auch nicht überschreiben.
Schau dir die Tutorials an, wie SlaterB schon geschrieben hat.

Und wenn dir die Java API zu
Code:
drawImage()
nichts sagt, dann frag ich mich wie du das Spiel in C# hinbekommen hast.
 

BDG

Aktives Mitglied
In c# und XNA geht alles ganz einfach...

Code:
Texture2D texture;
texture = game.Content.Load<Texture2D>("blablabla");
spriteBatch.Draw(texture, new Vector2(0, 0), Color.White);

Aber ich guck mir nochmal das besagte Tutorial an ^^
 

BDG

Aktives Mitglied
Uuuuund : Sorry, aber ich finde da keine Tutorials... ich sehe nur eine Liste mit Methode, und Beispielen wie man die verwendet....
und wo sollen beispielprogramme und tutorials sein ?
 

BDG

Aktives Mitglied
Ja, das ist ja super toll, wenn ich irgendwann mal ein starkes Bedürfnis nach bunten kreisen habe, aber eigentlich ging es mir darum ein Bild/eine Grafik anzeigen zu lassen...
 
S

SlaterB

Gast
und ich sage dir, dass du ein strukturelles Problem hast,
erst brauchst du ein laufenden JFrame mit einer akzeptierten paintComponent-Methode, eben nach Referenz-Beispielen mit JPanel, nicht im JFrame,
dann kannst du die einzelnen Zeichenbefehle beliebig austauschen

wenn du ein grünes Auto mit 3 Dachfenstern haben willst, lohnt es sich trotzdem noch, erstmal Fahrzeugbau grundlegend anzuschauen,
damit unten die 4 Räder und der Motor richtig sitzen, nicht willkürlich Klassen und Methoden zusammenstellen,
jedenfalls nicht bei paintComponent, das muss exakt sein,
welche Methoden danach untergeordnet dazukommen usw. ist dann Spielerei

überdenke übrigens bitte deinen Ton
 
Zuletzt bearbeitet von einem Moderator:

BDG

Aktives Mitglied
Ich hab es jetzt nochmal versucht, mit dem Code aus dem Tutorial nur etwas abgeändert :
Java:
import java.awt.*;

import javax.swing.*;
 
public class SwingPaintDemo {
 
	
	
    public SwingPaintDemo() {
    	
    }
 
    public static void createAndShowGui() {
        JFrame f = new JFrame("Aim For the Center");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container panel = new BullsEyePanel();
        f.getContentPane().add(panel, BorderLayout.CENTER);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
 
    public static void main(final String[] args) {
        Runnable gui = new Runnable() {
 
            @Override
            public void run() {
                createAndShowGui();
            }
        };
        //GUI must start on EventDispatchThread:
        SwingUtilities.invokeLater(gui);
    }
 
    /**
     * A Swing container that renders a bullseye background
     * where the area around the bullseye is transparent.
     */
    private static class BullsEyePanel extends JPanel {
 
    	private  Image imageo;
    	
        BullsEyePanel() {
            super();
            setOpaque(false); // we don't paint all our bits
            setLayout(new BorderLayout());
            setBorder(BorderFactory.createLineBorder(Color.black));
            imageo = Toolkit.getDefaultToolkit().getImage("Bomber1.png");
        }
 
        @Override
        public Dimension getPreferredSize() {
            // Figure out what the layout manager needs and
            // then add 200 to the largest of the dimensions
            // in order to enforce a 'round' bullseye
            Dimension layoutSize = super.getPreferredSize();
            int max = Math.max(layoutSize.width, layoutSize.height);
            return new Dimension(max + 200, max + 200);
        }
 
        @Override
        protected void paintComponent(final Graphics g) {
            super.paintComponent(g);
            Dimension size = getSize();
            int x = 0;
            int y = 0;
            int i = 0;
            
                
                g.drawImage(imageo, 0, 0, this);
            
        }
    }
}

Funktioniert natürlich nicht... Wird einfach nichts gezeichnet....
 
S

SlaterB

Gast
siehe auch mein Posting zwischendurch, aber passt ja nun dazu

-------

ein Bild von der Festplatte zu laden ist immer kritisch, für andere nicht am Code nachvollziebar ob das bei dir überhaupt existiert,
an der richtigen Stelle sitzt um gefunden zu werden usw.,

füge folgende drei Zeilen in deine main-Methode ein, dürften klar sein:
Java:
        File f = new File("Bomber1.png");
        System.out.println(f.exists());
        System.out.println(f.getAbsolutePath());

und verwende zum Bilder-Laden lieber:
Java:
new ImageIcon("Bomber1.png").getImage()
 

jgh

Top Contributor
probiere mal anstelle des png-Bildes ein jpg, bzw. jpeg..

[edit]warum auch immer, mit png und Zugriff auf der Festplatte klappt es zumindest bei mir auch nicht....per URL haut das hin

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.net.MalformedURLException;
import java.net.URL;

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

public class Game1 {

	public Game1() {

	}

	public static void createAndShowGui() {
		JFrame f = new JFrame("Aim For the Center");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container panel = new BullsEyePanel();
		f.getContentPane().add(panel, BorderLayout.CENTER);
		f.pack();
		f.setLocationRelativeTo(null);
		f.setVisible(true);
	}

	public static void main(final String[] args) {
		Runnable gui = new Runnable() {

			@Override
			public void run() {
				createAndShowGui();
			}
		};
		// GUI must start on EventDispatchThread:
		SwingUtilities.invokeLater(gui);
	}

	/**
	 * A Swing container that renders a bullseye background where the area
	 * around the bullseye is transparent.
	 */
	private static class BullsEyePanel extends JPanel {

		private Image imageo;

		BullsEyePanel() {
			super();
			setOpaque(false); // we don't paint all our bits
			setLayout(new BorderLayout());
			setBorder(BorderFactory.createLineBorder(Color.black));
			try {
				imageo = new ImageIcon(
						new URL(
								"http://openclipart.org/image/250px/svg_to_png/4982/laurent_bomber.png"))
						.getImage();
			} catch (MalformedURLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		@Override
		public Dimension getPreferredSize() {
			// Figure out what the layout manager needs and
			// then add 200 to the largest of the dimensions
			// in order to enforce a 'round' bullseye
			Dimension layoutSize = super.getPreferredSize();
			int max = Math.max(layoutSize.width, layoutSize.height);
			return new Dimension(max + 200, max + 200);
		}

		@Override
		protected void paintComponent(final Graphics g) {
			super.paintComponent(g);
			Dimension size = getSize();
			int x = 0;
			int y = 0;
			int i = 0;
			System.out.println(imageo);
			g.drawImage(imageo, 0, 0, this);

		}
	}
}
[/edit]
 
Zuletzt bearbeitet:

Jodo

Aktives Mitglied
Deinen Pfad zum Bild angeben und es sollte funktionieren. Bei mir tut es das jedenfalls.

Code:
import java.awt.Image;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.BorderLayout;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ImageExample {
	private Image image;
	private JFrame window;
	private JPanel panel;
	
	public ImageExample() {
		this.image = Toolkit.getDefaultToolkit().createImage("smiley.png");
		
		createGUI();
	}
	
	public static void main(String[] args) {
		ImageExample ie = new ImageExample();
	}
	
	private void createGUI() {
		window = new JFrame("Image Draw Test");
		window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		panel = new JPanel() {
			@Override
			public void paintComponent(final Graphics g) {
				super.paintComponent(g);
				
				g.drawImage(image, 0, 0, this);
			}
		};
		
		panel.setPreferredSize(new Dimension(300,300));
		
		window.getContentPane().add(panel, BorderLayout.CENTER);
		window.pack();
		window.setVisible(true);
		
	}
}
 
Zuletzt bearbeitet:

BDG

Aktives Mitglied
Danke schonmal... Also es wird noch nichts gezeichnet. Wo muss ich denn das Bild hinlegen ? ich habe es in Eclipse links bei der Ordnerstruktur zu default Package, da wo auch die Klasse drin ist, reingetan ^^
 
S

SlaterB

Gast
und ich habe dir drei Zeilen gepostet:
Java:
        File f = new File("Bomber1.png");
        System.out.println(f.exists());
        System.out.println(f.getAbsolutePath());
ausnahmsweise ohne dazuzuschreiben wofür, nicht zu erraten?
lege die Datei so, dass der angezeigte Pfad stimmt, ergo exists() true ergeben wird, dann könnte es schon weitaus eher klappen
 

Ikaron

Bekanntes Mitglied
Ich leg immer nen neues Package an mit Namen "images" oder sowas in die Richtung und leg darein eine Klasse namens "ImageLoader" - Die sieht dann z.B. so aus:
Java:
public class ImageLoader {

    public static BufferedImage load(String s) {

        try {
            return ImageIO.read(ImageLoader.class.getResourceAsStream(s));
        } catch(Exception e) { return null; }
    }
}

Dann einfach die Bilder in das "images" package legen und mit [c]ImageLoader.load("Bomber1.png");[/c] laden ;)

Wenn du mehrfachladen schneller machen willst, dann benutze das:

Java:
public class ImageLoader {

    private HashMap<String, BufferedImage> imgs = new HashMap<String, BufferedImage>();
    public static BufferedImage load(String s) {

        try {
            if(!imgs.containsKey(s))
                imgs.put(s, ImageIO.read(ImageLoader.class.getResourceAsStream(s)));
        } catch(Exception e) { }

        return imgs.get(s);
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R 2D Grafik zeichnen Java Basics - Anfänger-Themen 4
fragenÜber(fragen); Turtle Grafik mit GUI (JFrame) Java Basics - Anfänger-Themen 3
D Grafik auf ein JPane ausgeben. Java Basics - Anfänger-Themen 6
J Konstruktoren und Grafik Java Basics - Anfänger-Themen 3
J "Tetris" - Problem bei der Grafik Java Basics - Anfänger-Themen 5
R Grafik in CSV einbinden Java Basics - Anfänger-Themen 2
S Suche aktuelles 2D Grafik Tutorial Java Basics - Anfänger-Themen 5
B Java -Turtle Grafik - kennt sich jemand damit aus? Java Basics - Anfänger-Themen 1
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
D aufbauende Grafik Java Basics - Anfänger-Themen 13
8 Grafik erstellen Java Basics - Anfänger-Themen 6
Z Jump and Run - Grafik,Logik und GUI trennen Java Basics - Anfänger-Themen 4
G Bei Mouseover Grafik ändern, gutes Vorgehen gesucht Java Basics - Anfänger-Themen 0
V jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage Java Basics - Anfänger-Themen 5
L Grafik Kollision Detektierung Java Basics - Anfänger-Themen 4
L OOP Grafik in Circle Objekt füllen Java Basics - Anfänger-Themen 3
S Grafik löschen Java Basics - Anfänger-Themen 10
C Grafik einsperren Java Basics - Anfänger-Themen 2
E Quelltext für Grafik verschwindet Java Basics - Anfänger-Themen 9
S Grafik verschwindet Java Basics - Anfänger-Themen 8
O Java Grafik-Programmierung? Java Basics - Anfänger-Themen 16
S Teilstücke aus einer Grafik extrahieren Java Basics - Anfänger-Themen 2
Maxim6394 Grafik rotieren Java Basics - Anfänger-Themen 11
S Probleme mit JMenü und Grafik Java Basics - Anfänger-Themen 2
0 Grafik eine bestimmte Strecke laufen lassen Java Basics - Anfänger-Themen 6
R Hilfe bei erster Grafik Java Basics - Anfänger-Themen 2
A Gui Grafik Java Basics - Anfänger-Themen 4
maddin86 Grafik in .jar einbetten Java Basics - Anfänger-Themen 3
M import einer Grafik aus .jar funktioniert nicht Java Basics - Anfänger-Themen 6
M Grafik export in ein Jar File Java Basics - Anfänger-Themen 5
O Grafik in Frame laden Java Basics - Anfänger-Themen 9
H Diverse Dinge: Unstabile Grafik, Druckt Grafik nicht,Tooltipp verschwindet hinter Grafik Java Basics - Anfänger-Themen 3
H Grafik auf einem JPanel bewegen. Java Basics - Anfänger-Themen 7
F JLabel mit Grafik füllen Java Basics - Anfänger-Themen 3
K Grafik vergrößern/verkleinern Java Basics - Anfänger-Themen 3
F Zugriffsproblem - Funktion von Grafik trennen Java Basics - Anfänger-Themen 6
H HtmlUnit - Grafik speichern Java Basics - Anfänger-Themen 2
R Taste gedrückt = Grafik zeichen ?!? Java Basics - Anfänger-Themen 8
D PNG-Grafik erzeugen Java Basics - Anfänger-Themen 8
A Grafik erstellen und in Frame einfügen Java Basics - Anfänger-Themen 17
T Drucken von Listen bestehend aus Grafik und Text (unter swing) Java Basics - Anfänger-Themen 7
A grafik 2d Objekte mit der Maus bewegen Java Basics - Anfänger-Themen 4
A Grafik 2d Objekte farblich ausfüllen Java Basics - Anfänger-Themen 15
C Grafik einbinden Java Basics - Anfänger-Themen 11
F Größe von Grafik-Containern verschieben Java Basics - Anfänger-Themen 2
J Unterschied zwischen 2 Grafik Methoden Java Basics - Anfänger-Themen 2
M Grafik neuzeichnen Java Basics - Anfänger-Themen 8
M Grafik als Resource laden? Java Basics - Anfänger-Themen 2
G erste Schritte in Fenster und Grafik-Programmierung Java Basics - Anfänger-Themen 2
$ Inhalt von JPanel als Grafik? Java Basics - Anfänger-Themen 2
K Grafik beim JFrame oben Links ändern nur wie ? Java Basics - Anfänger-Themen 8
J Grafik Java Basics - Anfänger-Themen 3
K Grafik abspeichern, X11 Fehlermeldung Java Basics - Anfänger-Themen 15
T Zeigerposition auf Grafik messen? Java Basics - Anfänger-Themen 5
M ausm String eine Grafik erstellen Java Basics - Anfänger-Themen 4
F Grafik auf Button passt nicht Java Basics - Anfänger-Themen 1
E Grafik in bestimmtes frame einbinden . Java Basics - Anfänger-Themen 13
F Teilen einer großen Grafik Java Basics - Anfänger-Themen 2
M Grafik erstellen Java Basics - Anfänger-Themen 8
C Clear im Grafik Editor Java Basics - Anfänger-Themen 16
C Grafik flimmert bzw. flackert bei Bewegung Java Basics - Anfänger-Themen 11
N Grafik formatieren Java Basics - Anfänger-Themen 7
E fehlermeldung bei rekursiver grafik Java Basics - Anfänger-Themen 11
M wie kombiniere ich grafik und swing-komponenten Java Basics - Anfänger-Themen 16
N Java Problem bei Grafik und OoP Java Basics - Anfänger-Themen 7
V Grafik ist nur ganz kurz sichtbar Java Basics - Anfänger-Themen 3
H Streichholzziehen - Grafik? Java Basics - Anfänger-Themen 3
M Grafik auf einem JPanel erneut darstellen Java Basics - Anfänger-Themen 3
S Grafik verschwindet aus JTabbedPane Java Basics - Anfänger-Themen 4
C Grafik in einem Panel als Bild exportieren Java Basics - Anfänger-Themen 8
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
luggas89 Mit Jframe live zeichnen Java Basics - Anfänger-Themen 4
K 3D Fläche Zeichnen Java Basics - Anfänger-Themen 2
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
R Iterativ zeichnen Java Basics - Anfänger-Themen 1
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
KogoroMori21 Mit einer Schleife eine Treppe zeichnen Java Basics - Anfänger-Themen 29
V Speicherzustand zeichnen Java Basics - Anfänger-Themen 0
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
B Java JFrame zeichnen Java Basics - Anfänger-Themen 4
Mosquera f(x)=x² zeichnen Java Basics - Anfänger-Themen 5
J Graphen in Java zeichnen Java Basics - Anfänger-Themen 11
L Anfängerin möchte Linie zeichnen Java Basics - Anfänger-Themen 8
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
S Zeichnen mit Wiederholungen Java Basics - Anfänger-Themen 12
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
P Einen String mittig zeichnen? Java Basics - Anfänger-Themen 1
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
W Wie kann ich in Java eine Kurve aus Punkten zeichnen? Java Basics - Anfänger-Themen 25
snipesss Linie zeichnen ohne extra Klasse? Java Basics - Anfänger-Themen 3
C Umrisse von Bilddateien mithilfe Polygonen zeichnen Java Basics - Anfänger-Themen 5
G Aus einem Code ein Sequenzdiagramm zeichnen? Java Basics - Anfänger-Themen 1
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7
B Java Graphen zeichnen - Brauche Hilfe Java Basics - Anfänger-Themen 9
C Schleifenaufgabe - Molekül zeichnen Java Basics - Anfänger-Themen 6
K Ungenauigkeit beim Zeichnen von Funktionen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben