AWT Text der mit Graphics "drawString(...)" geschreiben wurde wieder löschen.

xJan45x

Aktives Mitglied
Hallo Leute,
Ich bin grade da bei mein 2D Spiel zu machen. Und wollte mal fragen wenn ich ein Text mit drawString aus der Graphics Klasse erstelle. Dann erscheint der Text auch aber ich lasse das System dann kurz Schlafen mit "Thread.sleep(500);" und wenn er dann wieder aufgewacht ist dann sollte noch ein Text geschrieben werden. So weit geht das auch nur der Text der vor dem schlafen geschrieben wurde ist halt noch da. Wenn ich das Bild neuzeichne im dem ich einfach das JLabel das Icon neusetzte dann ist auch der erste Text weg aber denn kann ich nix mehr drauf zeichnen. fillRect() und clearRect() habe ich auch schon versucht hat aber nix gebracht. Hat einer ne Idee wie ich denn Text denn ich vor dem schlafen geschrieben habe wieder weg bekomme. So das ich dann einfach an der gleichen Stelle ein neuen Text schreiben kann?

So weit habe ich es gemacht:
Java:
	public void paint(Graphics g){
		super.paint(g);
		g.setFont(new Font("Times New Romans", Font.BOLD, 24));
		g.setColor(Color.black);
		g.drawString("Daten werden geladen", 250, 520);
		try{
			Thread.sleep(500);
		}catch(Exception e) {
			e.printStackTrace();
		}
		g.setColor(Color.black);
		g.drawString("Lade Spieler", 250, 520);
	}

Ich danke euch jetzt schon mal! 🙂
 
Du musst bevor du den Text per rect übermalst einfach die Farbe des Hintergrundes setzen, falls du ein Image verwenden solltest musst du dieses, oder den Bereich des Bildes einfach neu zeichnen.
 
Du musst bevor du den Text per rect übermalst einfach die Farbe des Hintergrundes setzen, falls du ein Image verwenden solltest musst du dieses, oder den Bereich des Bildes einfach neu zeichnen.

Ja, der ganze Hintergrund ist ein Bild. Nur wenn ich denn Hintergrund neuzeichne. Dann kann ich nix mehr drauf schreiben mit drawString es wird einfach nicht angezeigt
 
Hier ein kleines beispiel wie man das ganze passiv / aktiv umsetzen könnte :



Java:
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;


@SuppressWarnings("serial")
public class DrawExample extends JPanel implements ActionListener{

	JTextField field;
	JButton print, clear;
	
	final int WIDTH = 400;
	final int HEIGHT = 400;
	
	Image image;
	
	public DrawExample(){
		setPreferredSize(new Dimension(WIDTH, HEIGHT));
		loadImage("F:/Bilder/Wallpaper/4095.jpg");
		initComponents();
		addComponents();
	}
	
	private void loadImage(String s){
		try {
			image = ImageIO.read(new FileInputStream(new File(s)));
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private void initComponents(){
		print = new JButton("Labeling");
		print.addActionListener(this);
		clear = new JButton("Clear");
		clear.addActionListener(this);
		field = new JTextField();
		field.setPreferredSize(new Dimension(120,25));
	}
	
	private void addComponents(){
		add(field);
		add(print);
		add(clear);
	}
	
	private void clear(){
		repaint();
	}
	
	private void print(String text){
		Graphics g = getGraphics();
		
		g.setFont(g.getFont().deriveFont(Font.BOLD, 16f));
		g.drawString(field.getText(), 30, 70);
	}
	
	@Override
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		
		g.drawImage(image, -200, -400, null);
	}

	@Override
	public void actionPerformed(ActionEvent e){
		if(e.getSource() == print) {
			print(field.getText());
		}
		if(e.getSource() == clear) {
			clear();
		}
	}
	
	public static void main(String[] args){
		JFrame f = new JFrame("Example");
		f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		f.setContentPane(new DrawExample());
		f.pack();
		f.setLocationRelativeTo(null);
		f.setVisible(true);
	}
}

Hier wird beim klick auf "clear" einfach die überschriebene repaint() methode aufgerufen und das image einfach neu gezeichnet , man könnte hier auch dazu übergehen und den text auf das image zeichnen in dem man sich den grafikkontext des images holt, allerdings würde dann beim neuzeichnen der text immernoch da stehen 😉
deshalb geht man dazu über und zeichnet den text aktiv, während man das image passiv über paintComponent zeichnet.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben