Applett in JFrame

Cruyff

Mitglied
abend euch allen,

ich habe hier ein Programm das ein Applett ist jedoch wie bekomm ich das als JFrame hin hab wirklich keine ahnung (klar das ich eine main brauche aber ich kann ja einem JFrame ja nur Componenten adden und weiß dann halt nicht wie ich den Thread einbinden soll :( ). Hoffe das ihr mir helfen könnt.

Code:
package Test;
import java.applet.*;
import java.awt.*;

public class Ball extends Applet implements Runnable
{
	// Initialisierung der Variablen
	int x_pos = 10;		// x - Position des Balles
	int y_pos = 100;	// y - Position des Balles
	int radius = 20;	// Radius des Balles

	// Variablen für die Doppelpufferung
	private Image dbImage;
	private Graphics dbg;

	public void init()
	{
		setBackground (Color.green);
	}

	public void start ()
	{
		// Schaffen eines neuen Threads, in dem das Spiel läuft
		Thread th = new Thread (this);
		// Starten des Threads
		th.start ();
	}

	public void stop()
	{

	}

	public void destroy()
	{

	}

	public void run ()
	{
		// Erniedrigen der ThreadPriority um zeichnen zu erleichtern
		Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

		// Solange true ist läuft der Thread weiter
		while (true)
		{
			// Verändern der x- Koordinate
			x_pos ++;

			// Neuzeichnen des Applets
			repaint();

			try
			{
				// Stoppen des Threads für in Klammern angegebene Millisekunden
				Thread.sleep (20);
			}
			catch (InterruptedException ex)
			{
				// do nothing
			}

			// Zurücksetzen der ThreadPriority auf Maximalwert
			Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
		}
	}

	/** Update - Methode, Realisierung der Doppelpufferung zur Reduzierung des Bildschirmflackerns */
	public void update (Graphics g)
	{
		// Initialisierung des DoubleBuffers
		if (dbImage == null)
		{
			dbImage = createImage (this.getSize().width, this.getSize().height);
			dbg = dbImage.getGraphics ();
		}

		// Bildschirm im Hintergrund löschen
		dbg.setColor (getBackground ());
		dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);

		// Auf gelöschten Hintergrund Vordergrund zeichnen
		dbg.setColor (getForeground());
		paint (dbg);

		// Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
		g.drawImage (dbImage, 0, 0, this);
	}

	public void paint (Graphics g)
	{
		g.setColor  (Color.red);

		g.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);
	}
}
 
hab es hinbekommen, leider kann ich die Hintergrund nicht ändern könnt ihr mir vielleicht helfen?
Code:
package Test;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;
public class Ballbewegung1 extends JFrame 
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	// Initialisierung der Variablen
	int x_pos = 10;		// x - Position des Balles
	int y_pos = 100;	// y - Position des Balles
	int radius = 20;	// Radius des Balles
	Image puffer;
	Dimension alte_große;
	Insets einfugen;
	static Ballbewegung1 wnd = new Ballbewegung1();
		
	public void paint (Graphics g)
	{ 
		 if ((alte_große == null) || (alte_große != getSize())) {
		      alte_große = getSize();
		      puffer = new BufferedImage(getWidth(), getHeight(),
		          BufferedImage.TYPE_INT_RGB);
		    }
		    if (einfugen == null) {
		      einfugen = getInsets();
		    }		    
		    // berechnung der farben in den einzelnen teilen
		      Graphics bufferG = puffer.getGraphics();
		      bufferG.setColor(Color.blue);		    	
		      bufferG.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);
		 	  g.drawImage(puffer, 0, 0, this);
	}
	
	public void go(){
	TimerTask task = new TimerTask(){
		public void run(){
			// Solange true ist läuft der Thread weiter
			while (true)
			{
				// Verändern der x- Koordinate
				x_pos ++;

				// Neuzeichnen des Applets
				repaint();
				try
				{
					// Stoppen des Threads für in Klammern angegebene Millisekunden
					Thread.sleep (10);
				}
				catch (InterruptedException ex)
				{
					// do nothing
				}
			}
		}
	};
	Timer timer = new Timer();
	timer.schedule(task,0);
	}
	
	public static void main (String args[]){
		wnd.setSize(800,600);
		wnd.getContentPane().setBackground(Color.green);			
		wnd.setVisible(true);
		wnd.go();
	}
}
 
für alle die es Interessiert es lag am repaint Teil hier die Lösung:

Code:
public void paint (Graphics g)
	{ 
		 if ((alte_große == null) || (alte_große != getSize())) {
		      alte_große = getSize();
		      puffer = new BufferedImage(getWidth(), getHeight(),
		          BufferedImage.TYPE_INT_RGB);
		    }
		    if (einfugen == null) {
		      einfugen = getInsets();
		    }		    
		    // berechnung der farben in den einzelnen teilen 
		    int x = einfugen.left;
		    int y = einfugen.top;
		    int width = getWidth() - einfugen.left - einfugen.right;
		    int height = getHeight() - einfugen.top - einfugen.bottom;
		  
			  synchronized (puffer) {
			      Graphics bufferG = puffer.getGraphics();
			      bufferG.setColor(Color.cyan);
			      bufferG.fillRect(x, y, width, height);
			      bufferG.setColor(Color.red);					  
			      bufferG.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);
			    }
			    g.drawImage(puffer, 0, 0, this);			
	}
 
Zurück