AWT Zaehler wird nicht korrekt angezeigt

chmbw

Mitglied
Hallo,

ich probiere / spiele grade ein wenig mit Swing und AWT rum, und habe jetzt ein kleines Problem: Ich habe, nachdem man "x" drückt, einfach ein Bild angezeigt und oben links in der Ecke einen Zähler hochlaufen lassen. Das klappt auch alles, nur werden auf einmal die Zahlen nurnoch als Kästchen dargestellt, wobei sie die korrekte Stellenanzahl haben. Hat jemand eine Idee woran das liegt?
Grüße

Java:
package src;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;

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



public class Main extends JPanel implements Runnable, KeyListener{

	public static final int GAME_WIDTH = 640;
	public static final int GAME_HEIGHT = 480;
	
	private static final long serialVersionUID = 1L;

	private boolean running = false;
	private boolean startGame = false;
	
	private BufferedImage screen;

	//*******************
	public void setScreen(String filename) {
		screen = Images.load(filename);
	}
	//*******************
	public Main() {
		this.setPreferredSize( new Dimension(GAME_WIDTH , GAME_HEIGHT) );
		this.setFocusable(true);
		this.addKeyListener(this);
		this.setBackground(Color.WHITE);
		
	}
	//*******************	
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		if(!running) {
			g.setColor(Color.BLACK);
			g.drawString("Zum starten bitte X druecken",GAME_WIDTH/2-100,GAME_HEIGHT/2);
		}
	}
	//*******************
	public void start() {
		running = true;
		new Thread(this).start();
	}
	//*******************
	public void stop() {
		running = false;
	}
	//*******************
	public void run() {
	
	BufferedImage image = new BufferedImage(GAME_WIDTH,GAME_HEIGHT,BufferedImage.TYPE_INT_RGB);
	
		int i = 0;
		while(running) {
			System.out.println("i: "+i);
			
			Graphics g = image.getGraphics();
                        //Image wird in einer anderen Klasse geladen
			g.drawImage(Images.title,GAME_WIDTH/2-Images.title.getWidth()/2,GAME_HEIGHT/2-Images.title.getHeight()/2,null);
			g.setColor(Color.WHITE);
			g.drawString("i="+i,0,10);
			g.dispose();

			g=getGraphics();			
			g.drawImage(image,0,0,null);
			g.dispose();
			i++;
		}
	}
	//*******************
	public void keyPressed(KeyEvent e) {
		if(e.getKeyCode() == KeyEvent.VK_X) {
			System.out.println("x got pressed!");
			if(!running) {
			System.out.println("Thread got started");
			this.start();
			}
		}
		if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {
			System.out.println("escape got pressed!");
			this.stop();
		}
	}
	//*******************
	public void keyReleased(KeyEvent e) {
	}
	//*******************
	public void keyTyped(KeyEvent e) {
	}
	//*******************
	public static void main(String[] args) {
	
		JFrame frame = new JFrame("Test");
		Main main_obj = new Main();
		
		frame.setLayout(new BorderLayout() );
		frame.add(main_obj , BorderLayout.CENTER);
		
		frame.pack();
		frame.setResizable(false);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);

	}
	//*******************
}

vielen Dank im voraus! 🙂
 
Java:
g=getGraphics();
getGraphics sollte man NIE auf Components aufrufen. Gezeichnet wird ausschließlich in der paintComponent Methode.
 
Erstmal danke für deine Antwort! Das mit getGraphics ist schonmal gut zu wissen, aber worin liegt das begründet bzw. was kann deshalb passieren?

Leider ist das jedoch nicht der Ursprung des Fehlers gewesen...

Grüße

EDIT:

Ich hab die Lösung gefunden....

Java:
BufferedImage image = new BufferedImage(GAME_WIDTH,GAME_HEIGHT,BufferedImage.TYPE_INT_RGB);
muss in der while-schleife stehen, somit gehts
 
Zuletzt bearbeitet:

Zurück
Oben