zeichenfläche

Tonxxx

Bekanntes Mitglied
Hallo ich habe eine frage zu den Layyoutmanagern.

nehmen wir an wir haben ein fertiges Applet, bei dem nur ein roter ball über das feld geht:

Java:
import java.applet.*;
import java.awt.*;

public class Ballbewegung1 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

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

	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);
		}
	}


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

		g.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);
	}

}

nun möchte ich einige button daneben machen, und so habe ich mich jetz mit layoutmanager befasst.

was ich nun bräuche wäre, so etwas wie einen rahmen, indem ich mein "altes" applet packen könnte.

Ich stell mir das etwa so vor:

Java:
import java.applet.*;
import java.awt.*;

public class Ballbewegung1 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

	Zeichenfeld f;

	public void init()
	{

		setLayout(new FlowLayout());

		add( new ZeichenFeld(int hight, int breight));
		add(new Button("Button1"));
		setSize(1000,1000);
		f.setBackground (Color.blue);
	}

	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);
		}
	}


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

		f.g.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);
	}

}
ich füge also dass Objakt Zeichenfleche zu, in dem ich dann wieder arbeiten kann, dass heisst dort dann den background festlegen ect. nun zeichne ich nicht mehr auf dem ganzen applet, sondern nur noch in Zeichenfläche.

nun ist meine frage ob es so etwas gibt, und wie dann diese Zeichenfläche wirklich heisst.

hoffe alles verständlich...
 

Tonxxx

Bekanntes Mitglied
vielen dank, nun habe ich etwas kleines programmiert, verstehe nur aber nicht, wiso dass nicht klappt.
Java:
public class test extends Applet 
{
    public void init() {
        add(new LayoutManager_1K());
    }

}


class MyFirstCanvasK extends Canvas 
{
	public void paint(final Graphics g)
	{
		/* das paint() der super-Klasse muss natürlich aufgerufen werden. */
		super.paint(g);
 
		/* Zuerst zeichne ich ganz eifach eine Linie vom Punkt (5/5) zum Punkt (50/150) */
		g.drawLine(5, 5, 50, 150);
		/* Dann noch ein Rechteck vom Punkt (50/50) zum Punkt (200/200) */
		g.drawRect(50, 50, 200, 200);
 
	}
}

class LayoutManager_1K extends Panel
{
	// Initialisierung der Variablen


	
	int appletsize_x = 500; 	// Größe des Applets in x - Richtung
	int appletsize_y = 500;		// Größe des Applets in y - Richtung



    	BufferedImage buffer;
    	Graphics2D bufferG;


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



  	 JButton button = new JButton("Tastaturereignisse");
   	 JLabel l = new JLabel();

	public LayoutManager_1K() 
	{
  		setBackground(Color.lightGray);
		MyFirstCanvasK myCanvas = new MyFirstCanvasK();

		setLayout(new FlowLayout());
		add (new Button("Button1"));
		add (myCanvas);
		add (new Button("Button2"));

  		setPreferredSize(new Dimension(appletsize_x,appletsize_y));
		//pack();




	}

	public void paint (Graphics g)
	{}
}

muss ich dem nicht noch sagen wie gross MyCanvas ist?

die beiden Buttons zeichnet er, und was mich erstaunt hat, hat es eine kleine lücke dazwischen, woher kommt das??
 

Ähnliche Java Themen

Neue Themen


Oben