JFrame Graphics.drawString Problem

mmhhh

Mitglied
Hallo,
ich habe ein Programm, das einen JFrame zur ausgabe benutzt, in welchen mit der Graphics.drawString Methode 2 Strings geschrieben werden, wenn sich diese ändern, legt sich die änderung einfach darüber, so das man nach einer weile nichts mehr erkennen kann, weis jemand, wie ich das problem beheben kann?
 
Nein ich hab keinen KSKB

Java:
public void tick()
	{
		if(batteryP>100)
		{
			batteryCells=100;
		}
		else if(batteryP<0)
		{
			batteryP=0;
		}
		
		batteryCells = (int) (batteryP/12.5);
		batteryMin = (int) (batteryP/2.222222);
	}
	
	public void render(Graphics g)
	{

		Font f = new Font ("Monospaced", Font.BOLD | Font.ITALIC, 18);
	      g.setFont (f);
	      
		g.drawString(batteryMin + " min", x,y);
		g.drawString(batteryP + "%", x,y+20);

das ist der Teil, der wichtig seien dürfte, die methode tick() wird alle 5ms aufgerufen, direkt danach render()

wie ist das mit dem super aufruf gemeint?
 
Java:
public void tick()
	{
		module.tick();

	}
	
	public void render()
	{
		Graphics g = this.getGraphics();
	
		
		g = getGraphics();
		module.render(g);
		
		g.drawImage(screen, 0, 0, size.width, size.height, 0, 0,size.width, size.height,  null);
		g.dispose();
	}

	public void run() 
	{
		while(isRunning)
		{
			tick();
			render();
			try
			{
				Thread.sleep(5);
			}
			catch(Exception e) {}
		}
	}

ich hab das so geregelt
 
Java:
        Graphics g = this.getGraphics();
        g = getGraphics();
???

Wenn du etwas auf ein Blatt Papier schreibst und dann über das bereits geschriebene nochmal was drüber schreibst, verschwindet das erste dann? Nein. Du musst selbstständig erst die ganze Fläche löschen, also mit Weiß (oder eben der Hintergrundfarbe) übermalen.
 
Hab nich ausprobiert obs läuft, müsste aber so funktionieren

Java:
import java.awt.Graphics;
import java.awt.image.BufferedImage;

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


public class Test
{
	private JFrame frame;
	private ImageComponent comp;
	
	public Test()
	{
		frame = new JFrame("Paint-Component Beispiel");
		comp = new ImageComponent();
		
		frame.setContentPane(comp);
		frame.setSize(800, 600);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		
		new Thread(new Runnable()
		{
			
			@Override
			public void run()
			{
				while(isRunning)
		        {
		            comp.setBackgroundImage(/*Hier dein Buffered Image*/);
		            try
		            {
		                Thread.sleep(5);
		            }
		            catch(Exception e) {}
		        }
			}
		}).start();
	}
	
	public static void main(String[] args)
	{
		new Test();
	}
	
	private class ImageComponent extends JComponent
	{
		private BufferedImage backgroundImage;
		
		@Override
		protected void paintComponent(Graphics g)
		{
			if(backgroundImage != null)
				g.drawImage(backgroundImage, 0, 0, this.getWidth(), this.getHeight(), null);
		}

		public BufferedImage getBackgroundImage()
		{
			return backgroundImage;
		}

		public void setBackgroundImage(BufferedImage backgroundImage)
		{
			this.backgroundImage = backgroundImage;
			this.revalidate();
			this.repaint();
		}
	}
}
 

Neue Themen


Zurück
Oben