Home
DirectX 8
Java
  • Hello World
  • Konvertierungen
  • Grafik
  • Animation
  • Sounds
  • Stuff
  • Download

    Links


    Kontakt












  • Java Programmierung - Grafikbefehle
    • Grafikbefehle Anwenden mit Tips und Trick

      Zuerst werden wir mal die aktuelle Zeichenfarbe weiß setzen.
      setColor(Color.white)

      Wir haben einige vordefinierte Farben in der Color-Klasse die wir verwenden können.
      Name RotGrünBlau
      black 0 0 0
      blue 0 0 255
      cyan 0 255 255
      darkGray64 64 64
      gray 128 128 128
      green 0 255 0
      lightgray192192 192
      magenta 255 0 255
      orange 255 200 0
      pink 255 175 175
      red 255 0 0
      white 255 255 255
      yellow 255 255 0

      Eine eigene Farbe können wir so erstellen.
      farbe = new Color(r,g,b)
      R,G,B bestimmt den Rot, Grün, Blau Anteil. Der Wertebreich ist 0-255.
      	
      	import java.awt.*;
      	import java.applet.*;
      
      	public class farbe extends Applet
      	{
      		public int mx,my;
      	
      		public void paint(Graphics g)
      		{		
      			Color farbe;
      
      			g.setColor(Color.white);
      			g.drawString("Hallo Welt",10,10);
      
      			farbe = new Color(100,100,100);
      
      			g.setColor(farbe);
      			g.drawString("Hallo Welt",10,22);
      		}	
      	}
      	


      Hier nun das Beispiel in Aktion:


      Möchten wir die Hintergundfarbe ändern so müssen wir diesen
      mit einer anderen Farbe ausfüllen bevor wir die Strings ausgeben.
      fillRect(x,y,width,height);
      Diese Methode füllt ein Rechteck an Postion x,y mit der breite und höhe von width, height.

      	import java.awt.*;
      	import java.applet.*;
      
      
      	public class farbeb extends Applet
      	{
      		public int mx,my;
      	
      		public void paint(Graphics g)
      		{		
      			Color farbe;
      	
      			g.setColor(Color.black);
      			g.fillRect(0,0,size().width,size().height);
      	
      			g.setColor(Color.white);
      			g.drawString("Hallo Welt",10,10);
      	
      			farbe = new Color(100,100,100);
      	
      			g.setColor(farbe);
      			g.drawString("Hallo Welt",10,22);
      		}	
      	}
      	
      Mit die Methode size().width und size().height erfahren wir die Höhe und Breite des Applets.

      Hier nun das Beispiel in Aktion:


      Anhand von folgendem Applet werde wir ein das Flicker-Problem erkennen.
      	import java.awt.*;
      	import java.applet.*;
      	
      	public class gmaus extends Applet
      	{
      		public int mx,my;
      	
      		public boolean mouseMove(Event e,int x ,int y)	
      		{
      			mx=x;
      			my=y;
      			repaint();
      			return true;
      		}
      	
      		public void paint(Graphics g)
      		{		
      			g.setColor(Color.black);
      			g.fillRect(0,0,size().width,size().height);
      
      			g.setColor(Color.white);
      			g.drawString("XPos:"+Integer.toString(mx),10,10);
      			g.drawString("YPos:"+Integer.toString(my),10,22);
      	
      		}	
      	}
      	

      Sobald wir die Maus innerhalb des Applets bewegen wird die Methode repaint() aufgerufen die wiederum die Methode update(Graphics g) ausführt die den gesamten Appletbereich löscht und dann erst neuzeichnet.
      Dadurch entsteht ein Flackern.
      Verhindern kann man das indem wir die Methode update() überschreiben.
      		public void update(Graphics g)
      		{
      			// Appletbereich nicht löschen direkt neuzeichnen
      			paint(g);
      		}
      	


      Das was jetzt noch flackert ist das Neuzeichnen des Strings.
      Zuerst wird ja der Hintergund schwarz gelöscht und dann erst der String gesetzt.
      Auch dies können wir mit einem Buffer unterdrücken.
      Dafür müssen wir ersteinmal eine init()-Methode schreiben.


      		private Image Buffer;
      		private Graphics zBuffer;
      		public void init()
      		{
      			Buffer=createImage(size().width,size().height);
      			zBuffer=Buffer.getGraphics();
      			
      		}
      	

      Dies Methode wird vom Browser aus als Initialisierung aufgerufen.
      Wir könne hier Variablen setzen oder unser Buffer gestalten.
      Mit createImage(size().width,size().height) erstellen wir ein Image.

      Mit zBuffer=Buffer.getGraphics() bekommen wir ein Graphics-Object zBuffer.
      Damit können wir Grafik Befehle innerhalb des Images Buffer benutzen.

      Hier das fertige Flickrfrei Applet
      	import java.awt.*;
      	import java.applet.*;
      
      	public class gmausc extends Applet
      	{
      		private int mx,my;
      		private Image Buffer;
      		private Graphics zBuffer;
      
      		public void init()
      		{
      			Buffer=createImage(size().width,size().height);
      			zBuffer=Buffer.getGraphics();
      			
      		}
      
      		public void update(Graphics g)
      		{
      			paint(g);
      		}
      
      		public boolean mouseMove(Event e,int x ,int y)	
      		{
      			mx=x;
      			my=y;
      			repaint();
      			return true;
      		}
      
      		public void paint(Graphics g)
      		{		
      			Color farbe;
      
      			zBuffer.setColor(Color.black);
      			zBuffer.fillRect(0,0,size().width,size().height);
      
      			zBuffer.setColor(Color.white);
      			zBuffer.drawString("XPos:"+Integer.toString(mx),10,10);
      			zBuffer.drawString("YPos:"+Integer.toString(my),10,22);
      			g.drawImage(Buffer,0,0,this);
      		}	
      	}	
      	

      Mit der Graphics Methode drawImage(Image img,x,y,ImageObserver observer);
      Wird der Buffer in die normale Grafik Oberfläche kopiert.
      Daher werden die zeichnenvorgänge nicht mehr sichtbar und nur das resultat erscheint.
      Ein Flickern ist somit ausgeschlossen.
      Image img ist der Buffer.X,Y steht für die Position zudem kopiert werden soll.
      ImageObserver observer definiert das Object das informiert werden soll. (Meistens this bei Applets.)
      Es liefert true zurück sobald alle Pixel gezeichnet wurden.

      Hier das fertige Flickerfrei-Beispiel in Aktion: