FANDOM


TINF-Maturafragen

Keine Gewähr auf Richtigkeit :) (und Eleganz sowieso nicht) berni

Kombination von Uhrzeit anzeigen und Punkt bewegen Bearbeiten

package appletThread;

import java.applet.Applet;
import java.awt.Graphics;
import java.util.Calendar;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class AppletThread extends Applet implements Runnable, ActionListener
{
	private static final long serialVersionUID = -2981986505396680999L;
	private int i;
	private Thread thread;
	private Calendar cal;
	
	private Button bStart, bStop, bPause;

	private boolean countflag,runflag;
	
	public void init()
	{
		this.thread = new Thread(this);
		this.cal = Calendar.getInstance();

		this.runflag = false;
		this.i=0;
		this.countflag = false;
		
		this.bStart = new Button("Start");
		this.bStop = new Button("Stop");
		this.bPause = new Button("Pause");
		
		this.bStart.addActionListener(this);
		this.bStop.addActionListener(this);
		this.bPause.addActionListener(this);
		
		this.add(this.bStart);
		this.add(this.bStop);
		this.add(this.bPause);
	}
	
	public void start()
	{
	}
	
	public void actionPerformed(ActionEvent e)
	{
		Button source = (Button) e.getSource();
		
		//thread starten
		if(source == bStart)
		{
			System.out.println("ThreadState (Start):"+this.thread.getState());
			
			//noch nie gestartet?
			if(Thread.State.NEW == this.thread.getState())
			{
				this.runflag = true;
				this.thread.start();
			}
			
			//gestartet und gestoppt?
			else if(Thread.State.TERMINATED == this.thread.getState())
			{
				//kein restart möglich -> neuer thread
				this.thread = new Thread(this);
				//starten
				this.runflag = true;
				this.thread.start();
			}
		}
			
		//thread stoppen
		if(source == bStop)
		{
 			System.out.println("ThreadState (Stop):"+this.thread.getState());
			
			this.runflag = false;
			
			this.thread.interrupt();
		}
		
		if(source == bPause)
		{
			System.out.println("ThreadState (Pause):"+this.thread.getState());
			
			this.runflag = !this.runflag;
			
			synchronized (this)
			{
				if(this.runflag)
				{
				//fortsetzen des threads und die "synchronized-sperre" setzen
					notify();
				}
			}			
		}
	}
	
	public void paint(Graphics g)
	{
		g.drawString("Time: " +(this.cal.getTime()).toString(),20,50);
		g.drawOval(20+i,100-1,15,15);
	}
	
	public void run()
	{
		while(true)
		{
			
			synchronized (this)
			{
				try
				{
					while(!runflag)
				//unterbrechen des threads, die "synchronized-sperre" aufheben und wartend markieren
						wait();	
				}
				catch(InterruptedException e)
				{
				}
			}	
			
			//"ball" nach rechts schieben
			if(countflag)
			{
				this.i++;
				if(i==100)
					countflag = false;
			}
			//"ball" nach links schieben	
			else
			{
				if(i==0)
					countflag = true;
				i--;
			}
				
			//aktuelle zeit holen (viell. gibts eine elegantere möglichkeit)
			this.cal = Calendar.getInstance();
				
			try
			{
				Thread.sleep(5);
			}
			catch(InterruptedException e)
			{
				//siehe Anmerkung im skriptum warum erneuter aufruf der interrupt-methode
				this.thread.interrupt();
			}
			
			this.repaint();

			//wenn der thread unterbrochen wurde (durch interrupt() -> ausgelöst in actionPerformed) 
			if(this.thread.isInterrupted())
			 	break;
		} 
	} 
}

einfachen Punkt bewegen Bearbeiten

import java.awt.*;
import java.awt.events.*;
import java.applet.*;

public class JumpingPoint extends Applet implements Runnable,ActionListener
{
   private Thread t = null;
   private Button b = null;
   private Rectangle r = null;
   private int dy = 1;

   public void init()
   {
      this.r = new Rectangle(this.getWidth()/2,0,20,20);

      this.setLayout(null);
      this.b = new Button("Stop");
      this.b.setBounds(70,30);
      this.b.setLocation(3,3);

      this.add(this.b);
   }

   public void start()
   {
      this.t = new Thread(this);
      this.t.start();
   }

   public void stop()
   {
      this.t.interrupt();
   }

   public void destroy()
   {
      this.t = null;
   }

   public void run()
   {
      Graphics g = this.getGraphics();
      Color currentColor = g.getColor();

      while(!this.t.isInterrupted())
      {
         g.setColor(this.getBackground());
         g.fillOval(this.r.getX(),this.r.getY(),this.r.getWidth(),this.r.getHeight());

         this.r.setLocation(this.r.getX(),this.r.getY() + dy);

         if((this.r.getX() + this.r.getHeight()) >= this.getHeight())
            this.dy = -this.dy;

         g.setColor(currentColor);
         g.fillOval(this.r.getX(),this.r.getY(),this.r.getWidth(),this.r.getHeight());

         try
         {
            this.t.sleep(10);
         }
         catch(InterruptedException ex)
         {
            this.t.interrupt();
         }
      }
   }

   public void paint(Graphics g)
   {
      g.fillOval(this.r.getX(),this.r.getY(),this.r.getWidth(),this.r.getHeight());
   }
}

Störung durch Adblocker erkannt!


Wikia ist eine gebührenfreie Seite, die sich durch Werbung finanziert. Benutzer, die Adblocker einsetzen, haben eine modifizierte Ansicht der Seite.

Wikia ist nicht verfügbar, wenn du weitere Modifikationen in dem Adblocker-Programm gemacht hast. Wenn du sie entfernst, dann wird die Seite ohne Probleme geladen.