2D-Grafik PNG Datei in JLabel Array Problem

LeckerPepper

Mitglied
Hallo liebe Java-Freunde,

Ich möchte sozusagen ein kleines Super Mario programmieren, mein Test hat sogar einwandfrei funktioniert:

04608-b830b722-d2b1-4ef1-9003-ec4d904e1f8f.png


Doch nun wo ich die farbigen Quadrate mit Texturen ersetzen wollte, ergab sich das Problem, dass pro Frame nur ca. zwei Quadrate mit Texturen angezeigt werden, aber immer an unterschiedlichen Stellen. Also eigentlich ist vom Code her nahezu alles richtig, nur die Quadrate mit den Texturen bleiben einfach nicht sichtbar sondern verschwinden, wenn die nächsten Quadrate erscheinen. Ich hoffe ihr versteht was mein Problem ist :oops:

04608-b3abea40-01a6-4676-9ca4-ab4f9ea133f0.png


Hier noch der Code von der Frame-Klasse, in der sich alles wichtige abspielt:
Java:
package SMv1;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class FrameSMv1 extends JFrame {

	int frameWidth = 1200, frameHeight = 700, xAnzahl=0;
	public String name;
	int u =25*15;
	JLabel label1[] = new JLabel[u];
	char[][] field = new char[25][15];
	ImageIcon dirtI = new ImageIcon("dirt.png");
	ImageIcon grasI = new ImageIcon("gras.png");
	ImageIcon skyI = new ImageIcon("sky.png");

	public FrameSMv1(String name) {

		super("Test");
		this.name = name;

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(frameWidth, frameHeight);

		getContentPane().setBackground(Color.WHITE);
		setVisible(true);
		setResizable(false);
		setLocationRelativeTo(null);
	}


	@SuppressWarnings("resource")
	public void readFile() {
		File file1 = new File(name);
		try {
			Scanner scann1 = new Scanner(file1);
			int y = 0;
			char[] tempChar = null;
			for (int i = 0; i < 14; i++) {
				 if(scann1.hasNext()){
				String tempString = scann1.next();
				tempChar = tempString.toCharArray();
				 }
				for (int x = 0; x < 24; x++) {
					field[x][y] = tempChar[x];
				}
				y++;

			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}

	}
	public void Screen() {
		for (int z = 0; z < u; z++) {
		    label1[z]= new JLabel();
		    add(label1[z]);
		
	
			for (int x = 0; x < 24; x++) {
				for (int y = 0; y < 14; y++) {
					
					
						if (field[x][y] == 'd') {
						   
							label1[z].setIcon(dirtI);
							label1[z].setBounds(x * 50, y * 50, 50, 50);
					
						}
						if (field[x][y] == 'g') {
						  
							label1[z].setIcon(grasI);
							label1[z].setBounds(x * 50, y * 50, 50, 50);
						}
						if (field[x][y] == 's') {
							  
							label1[z].setIcon(skyI);
							label1[z].setBounds(x * 50, y * 50, 50, 50);
						}
				}
			}
			
			}
		
		
	}
}
 

LeckerPepper

Mitglied
Okay, ich hab jetzt einfach meinen Plan mit dem JLabel Array über den Haufen geworfen und in einer Kopie der Frame-Klasse etwas anderes versucht:

Java:
package SMv1;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class CopyOfFrameSMv1 extends JFrame {

	int frameWidth = 1200, frameHeight = 700, xAnzahl = 0;
	public String name;
	int u = 25 * 15;
	JLabel dirt[] = new JLabel[u];
	JLabel gras[] = new JLabel[u];
	JLabel sky[] = new JLabel[u];
	char[][] field = new char[25][15];
	ImageIcon dirtI = new ImageIcon("dirt.png");
	ImageIcon grasI = new ImageIcon("gras.png");
	ImageIcon skyI = new ImageIcon("sky.png");

	public CopyOfFrameSMv1(String name) {

		super("Test");
		this.name = name;
		

		
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(frameWidth, frameHeight);

		getContentPane().setBackground(Color.WHITE);
		setVisible(true);
		setResizable(false);
		setLocationRelativeTo(null);
	}

	@SuppressWarnings("resource")
	public void readFile() {
		File file1 = new File(name);
		try {
			Scanner scann1 = new Scanner(file1);
			int y = 0;
			char[] tempChar = null;
			for (int i = 0; i < 14; i++) {
				if (scann1.hasNext()) {
					String tempString = scann1.next();
					tempChar = tempString.toCharArray();
				}
				for (int x = 0; x < 24; x++) {
					field[x][y] = tempChar[x];
				}
				y++;

			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}

	}
	public void paint(Graphics g) {
	    Graphics2D g2 = (Graphics2D) g;
	    Image dirtIm = Toolkit.getDefaultToolkit().getImage("dirt.png");
	    Image grasIm = Toolkit.getDefaultToolkit().getImage("gras.png");
	    Image skyIm = Toolkit.getDefaultToolkit().getImage("sky.png");

	    
	    for (int x = 0; x < 24; x++) {
			for (int y = 0; y < 15; y++) {			
				System.out.println(x+" "+y);
				if (field[x][y] == 'd') {

					g2.drawImage(dirtIm, x*50, y*50, this);

				}
				if (field[x][y] == 'g') {

					g2.drawImage(grasIm, x*50, y*50, this);

				}
				if (field[x][y] == 's') {

					g2.drawImage(skyIm, x*50, y*50, this);
					
				}
			}
		}
	    
	    
	}
}

Klappt soweit so gut, nur manchmal wird nur die Hälfte gezeichnet, manchmal nur zwei Reihen, manchmal 1/3 etc:
04608-1e53446a-8316-4b3d-a062-a14acd3dfe90.png

Außerdem wird komischerweise nur gezeichnet wenn ich System.out.println(x+" "+y); aufrufe ;( :mad:

Irgendwie versteh ich grad nur Bahnhof :/
 

njans

Top Contributor
"Außerdem wird komischerweise nur gezeichnet wenn ich System.out.println(x+" "+y); aufrufe"
Wie raufst du das auf?

Ich sollte vermutlich anmerken, dass es deutlich mehr Sinn machen würde, nicht von JFrame zu erben, sondern von JPanel und dort die paintComponent Methode zu überschreiben um dein Bild zu zeichnen.
Generell sollte man von der paint Methode bei JComponent eher die Finger lassen. Wenn man da Murx macht, kann das leicht zu visuellen Artefakten führen.
 

LeckerPepper

Mitglied
"Außerdem wird komischerweise nur gezeichnet wenn ich System.out.println(x+" "+y); aufrufe"
Wie raufst du das auf?

Ich sollte vermutlich anmerken, dass es deutlich mehr Sinn machen würde, nicht von JFrame zu erben, sondern von JPanel und dort die paintComponent Methode zu überschreiben um dein Bild zu zeichnen.
Generell sollte man von der paint Methode bei JComponent eher die Finger lassen. Wenn man da Murx macht, kann das leicht zu visuellen Artefakten führen.


Also ich hab das mit dem JPanel nun gemacht und jetzt wird zwar bei jedem ca. 10 Versuch das komplette Level gezeichnet, nur leider bei den anderen 9 Versuchen ca. 5 mal gar nicht und sonst auch nur teilweise...
Kannst du mir bitte nochmal helfen?
04608-099a3ece-0cb9-4e14-9494-eef6f136624b.png
 

turtle

Top Contributor
Wie njans (schon) wieder richtig anmerkte ;), solltest du von JPanel erben und nicht von JFrame.

Das habe ich mal gemacht und das Ergebnis ist hier und ich habe auch einen Screenshot angehängt. Meine Icons sind 50*50 Pixel gross und da praktisch per Zufall gefüllt wird, siehst aus, wie ein Flickenteppich. Alle Felder werden aber gezeichnet

Java:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.Random;

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

public class FrameSMv1 extends JPanel {

	int frameWidth = 1200, frameHeight = 700, xAnzahl = 0;
	public String name;
	int u = 25 * 15;
	JLabel dirt[] = new JLabel[u];
	JLabel gras[] = new JLabel[u];
	JLabel sky[] = new JLabel[u];
	char[][] field = new char[25][15];
	ImageIcon dirtI;
	ImageIcon grasI;
	ImageIcon skyI;
	Random random;

	public static void main(String[] args) {
		JFrame frame = new JFrame("Turtle");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		FrameSMv1 frameSMv1 = new FrameSMv1();
		frameSMv1.setPreferredSize(new Dimension(1300, 900));
		frame.add(frameSMv1);
		frame.pack();
		frame.setVisible(true);
	}

	public FrameSMv1() {
		random = new Random();
		dirtI = new ImageIcon(getClass().getResource("/images/dirt.png"));
		grasI = new ImageIcon(getClass().getResource("/images/gras.png"));
		skyI = new ImageIcon(getClass().getResource("/images/sky.png"));
		readFile();
	}

	public void readFile() {
		String possible = "dgs";
		for (int y = 0; y < 14; y++) {
			for (int x = 0; x < 24; x++) {
				int nextInt = random.nextInt(3);
				field[x][y] = possible.charAt(nextInt);
			}
		}

	}

	public void paint(Graphics g) {
		Graphics2D g2 = (Graphics2D) g;

		for (int x = 0; x < 24; x++) {
			for (int y = 0; y < 15; y++) {
				System.out.println(x + " " + y);
				if (field[x][y] == 'd') {

					g2.drawImage(dirtI.getImage(), x * 50, y * 50, this);

				}
				if (field[x][y] == 'g') {

					g2.drawImage(grasI.getImage(), x * 50, y * 50, this);

				}
				if (field[x][y] == 's') {

					g2.drawImage(skyI.getImage(), x * 50, y * 50, this);

				}
			}
		}

	}
}
 

Anhänge

  • turtle.jpg
    turtle.jpg
    153,8 KB · Aufrufe: 42
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Bilder zu ausführbarer Jar-Datei hinzufügen AWT, Swing, JavaFX & SWT 5
M Daten zufällig Einlesen aus einer Datei (binäres Format) AWT, Swing, JavaFX & SWT 7
ExceptionOfExpectation Mit einer laufenden GUI Applikation eine Datei in dem Rechner löschen AWT, Swing, JavaFX & SWT 2
melaniemueller Wortliste in einer Datei ablegen AWT, Swing, JavaFX & SWT 12
princess_sara1997 .jar Datei führt den Code nicht richtig aus AWT, Swing, JavaFX & SWT 19
Yonnig Lokale HTML-Datei in Java GUI rendern AWT, Swing, JavaFX & SWT 4
N JavaFX Javafx intelij Projekt zu ausführbaren jar Datei Machen AWT, Swing, JavaFX & SWT 1
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
T FXML Datei in Java Code einbinden: javafx.fxml.LoadException AWT, Swing, JavaFX & SWT 2
BabySuna Swing Komponenten auslagern auf separate Datei AWT, Swing, JavaFX & SWT 8
J Java Datei durch CMD mit Parameter ausführen AWT, Swing, JavaFX & SWT 1
B JavaFX JavaFX Anwendung deployen (entw als runnableJAR oder exe-Datei) AWT, Swing, JavaFX & SWT 15
M Eine Datei auf den Apache Server hochladen - über das Menü im JavaProgramm AWT, Swing, JavaFX & SWT 7
VPChief Gibt es eine möglichkeit Dateien aus der jar datei zu kopieren? AWT, Swing, JavaFX & SWT 46
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
MasterCaution Swing .jar Datei ausführen AWT, Swing, JavaFX & SWT 12
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
G Verknüpfung einer pdf Datei AWT, Swing, JavaFX & SWT 2
N Ausführbare Datei aus JavaFX Projekt erstellen AWT, Swing, JavaFX & SWT 22
L Bilder werden in exportierter Datei nicht geladen AWT, Swing, JavaFX & SWT 6
L Csv-Datei einlesen AWT, Swing, JavaFX & SWT 34
J *.jar öffnet PDF-Datei nicht AWT, Swing, JavaFX & SWT 35
M JavaFX Altes Fenster (FXML Datei) löschen AWT, Swing, JavaFX & SWT 16
F Java FX Von der Fxml Datei zum Objekt AWT, Swing, JavaFX & SWT 8
A JavaFX Anwendung in Jar Datei AWT, Swing, JavaFX & SWT 8
F FXML Datei aus dem SceneBuilder in Eclipse aufrufen AWT, Swing, JavaFX & SWT 1
J Swing JavaProgramm für Verschlüssen für eine Datei AWT, Swing, JavaFX & SWT 19
T .jar-Datei lässt sich unflexibler ausführen als über die IDE AWT, Swing, JavaFX & SWT 11
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
H Musik wird nach dem erstellen der .jar Datei nicht mehr abgespielt AWT, Swing, JavaFX & SWT 1
H JavaFX aus der .fxml Datei einen Konstruktor bedienen AWT, Swing, JavaFX & SWT 3
P JavaFX - XCF Datei von Gimp kann nicht angezeigt werden AWT, Swing, JavaFX & SWT 3
M Wie binde ich eine JavaFX ProgressBar an eine Datei Übertragung? AWT, Swing, JavaFX & SWT 2
7 JavaFX Verwendung einer ResizableCanvas-Klasse in fxml-Datei AWT, Swing, JavaFX & SWT 3
C JavaFX Auf Nodes einer FXML-Datei in start Methode zugreifen AWT, Swing, JavaFX & SWT 5
F Pfad von eingelesener Datei AWT, Swing, JavaFX & SWT 10
Crazynet xls Datei in JTable AWT, Swing, JavaFX & SWT 3
D Objekte einer Oberfläche in eine Datei/Ordner speichern AWT, Swing, JavaFX & SWT 9
P Programm durch Dateiaufruf starten und Datei öffnen AWT, Swing, JavaFX & SWT 2
G .txt-Datei einlesen /formatieren in JTextfield ?? AWT, Swing, JavaFX & SWT 8
B ST Datei einlesen AWT, Swing, JavaFX & SWT 1
D JavaFX Jar Datei Signieren mit Java 8u45 AWT, Swing, JavaFX & SWT 2
M Datei mit Komponenten einbinden AWT, Swing, JavaFX & SWT 7
M Swing PDF Datei nach drucken nicht löschbar AWT, Swing, JavaFX & SWT 6
A Databinding in FXML-Datei AWT, Swing, JavaFX & SWT 1
H 2D-Grafik .EPS Datei in .PNG konvertieren AWT, Swing, JavaFX & SWT 1
G Datei öffnen Dialog modifizieren AWT, Swing, JavaFX & SWT 13
F Swing Java Swing Array in Datei und wieder raus AWT, Swing, JavaFX & SWT 7
B JAVAFX und CSS Datei in Eclipse AWT, Swing, JavaFX & SWT 4
3 Swing JList-Inhalt als verschlüsselte Datei schreiben und lesen AWT, Swing, JavaFX & SWT 1
S Aus XML Datei FXML generieren AWT, Swing, JavaFX & SWT 4
V JavaFX - fxml-Datei laden (neben CSS) AWT, Swing, JavaFX & SWT 2
S Swing Verzeichnis/Datei-Pfad in JTextField schreiben AWT, Swing, JavaFX & SWT 2
A JFileChooser Datei speichern AWT, Swing, JavaFX & SWT 4
T Aus JAVA.Jar GUI eine Flash-Datei machen AWT, Swing, JavaFX & SWT 3
A Datei weiterverwenden mit JFileChooser AWT, Swing, JavaFX & SWT 6
A AWT TTF-Datei zu Font-Objekt finden? AWT, Swing, JavaFX & SWT 5
Iron Monkey Nach Drag & Drop die Datei auf Komponent darstellen AWT, Swing, JavaFX & SWT 2
J JFileChooser - Datei speichern AWT, Swing, JavaFX & SWT 7
M Datei in jar öffnen AWT, Swing, JavaFX & SWT 11
W Funktion aus einer Java Datei in eine andere einbauen AWT, Swing, JavaFX & SWT 25
P Neue Datei erstellen in JPanel AWT, Swing, JavaFX & SWT 5
N Speicherpfad für Datei auswählen AWT, Swing, JavaFX & SWT 2
A JTextArea - Zeichenbegrenzung nach .txt Datei import AWT, Swing, JavaFX & SWT 6
N Applet JButton soll html Datei aus einem Ordner öffnen AWT, Swing, JavaFX & SWT 2
E Swing jTextPane Text datei anzeigen AWT, Swing, JavaFX & SWT 7
M Datei Speichern unter Dialog - SWT AWT, Swing, JavaFX & SWT 3
T SWT:Datei speichern / öffnen AWT, Swing, JavaFX & SWT 6
X Applet Java Applet Datei Ausführung AWT, Swing, JavaFX & SWT 9
J Bild aus Datei in BufferedImage laden AWT, Swing, JavaFX & SWT 4
M Swing XML Datei in JTable darstellen + verändern AWT, Swing, JavaFX & SWT 3
D Swing JTable in Datei speichern und laden AWT, Swing, JavaFX & SWT 3
J Fehler beim Gif Datei öffnen AWT, Swing, JavaFX & SWT 2
N Swing TreePath Datei öffnen AWT, Swing, JavaFX & SWT 7
B Datei öffnen Dialog AWT, Swing, JavaFX & SWT 9
kodela Swing JFileChooser und die Datei-Extension AWT, Swing, JavaFX & SWT 3
T Info Datei AWT, Swing, JavaFX & SWT 3
J ImageIcon: ZipException bei ungültiger PNG-Datei AWT, Swing, JavaFX & SWT 2
W jar Datei öffnen AWT, Swing, JavaFX & SWT 4
W TrayIcon mit jdic (Problem bei .jar Datei) AWT, Swing, JavaFX & SWT 3
D Nodes eines statischen JTrees sollen auf Anker (Textmarken) in einer HTML-Datei zeigen AWT, Swing, JavaFX & SWT 8
R Swing XML Datei in JTree, Problem mit Daten einlesen AWT, Swing, JavaFX & SWT 34
M AWT Datei auf server speichern und beschreiben AWT, Swing, JavaFX & SWT 7
P JMenu-Erweiterung in externer Datei AWT, Swing, JavaFX & SWT 5
M Text in txt-Datei in letzte Zeile schreiben? AWT, Swing, JavaFX & SWT 14
X Swing Inhalt einer JEditorPane in Datei abspeichern AWT, Swing, JavaFX & SWT 5
E Datei in TextArea anzeigen AWT, Swing, JavaFX & SWT 12
data89 Nimbus Look and Feel als gepackte JAR-Datei AWT, Swing, JavaFX & SWT 3
S Auswahlfenster: Datei beim Doppelklick öffnen AWT, Swing, JavaFX & SWT 8
N Swing Hintergrund Bild in JAR Datei AWT, Swing, JavaFX & SWT 2
I Swing .Jar Datei - funktioniert - nun als Applet AWT, Swing, JavaFX & SWT 13
M Text-Datei in einem JFrame öffen? AWT, Swing, JavaFX & SWT 2
Fadi Images in JAR Datei laden? AWT, Swing, JavaFX & SWT 5
K Hyperlink als Datei identifizieren AWT, Swing, JavaFX & SWT 2
S Jar-Datei funktioniert nicht richtig AWT, Swing, JavaFX & SWT 3
1 Laden einer Datei zur Echtzeit Darstellen AWT, Swing, JavaFX & SWT 7
P Problem bei Datei zur Verwaltung von Tabs AWT, Swing, JavaFX & SWT 5
F png-Datei erstellen und einzelne Pixel schreiben AWT, Swing, JavaFX & SWT 2
A Ini Datei Auswerten - HILFE! AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben