Titel   Inhalt   Suchen   Index   DOC  Handbuch der Java-Programmierung, 5. Auflage
 <<    <     >    >>   API  Kapitel 25 - Farben

25.3 Verwenden von Farben



Um Farben bei der Ausgabe von Grafik oder Schrift zu verwenden, muss ein geeignetes Color-Objekt beschafft und dem Graphics-Objekt mit Hilfe der Methode setColor zugewiesen werden. Die Ausgaben erfolgen dann so lange in der neuen Farbe, bis durch Aufruf von setColor eine andere Farbe festgelegt wird. Mit Hilfe der Methode getColor kann die aktuelle Farbe ermittelt werden:

public void setColor(Color c)

public Color getColor()
java.awt.Graphics

Das folgende Beispiel zeigt die Verwendung von Farben und ihre Zusammensetzung aus den drei Grundfarben Rot, Grün und Blau. Es stellt das Prinzip der additiven Farbmischung mit Hilfe dreier überlappender Kreise dar:

001 /* Listing2501.java */
002 
003 import java.awt.*;
004 import java.awt.event.*;
005 
006 public class Listing2501
007 extends Frame
008 {
009   public static void main(String[] args)
010   {
011     Listing2501 wnd = new Listing2501();
012   }
013 
014   public Listing2501()
015   {
016     super("Der Farbenkreis");
017     addWindowListener(new WindowClosingAdapter(true));
018     setSize(300,200);
019     setVisible(true);
020   }
021 
022   public void paint(Graphics g)
023   {
024     int top  = getInsets().top;
025     int left = getInsets().left;
026     int maxX = getSize().width-left-getInsets().right;
027     int maxY = getSize().height-top-getInsets().bottom;
028     Color col;
029     int[] arx   = {130,160,190};
030     int[] ary   = {60,110,60};
031     int[] arr   = {50,50,50};
032     int[] arcol = {0,0,0};
033     boolean paintit;
034     int dx, dy;
035 
036     for (int y = 0; y < maxY; ++y) {
037       for (int x = 0; x < maxX; ++x) {
038         paintit = false;
039         for (int i = 0; i < arcol.length; ++i) {
040           dx = x - arx[i];
041           dy = y - ary[i];
042           arcol[i] = 0;
043           if ((dx*dx+dy*dy) <= arr[i]*arr[i]) {
044             arcol[i] = 255;
045             paintit = true;
046           }
047         }
048         if (paintit) {
049           col = new Color(arcol[0],arcol[1],arcol[2]);
050           g.setColor(col);
051           g.drawLine(x+left,y+top,x+left+1,y+top+1);
052         }
053       }
054     }
055   }
056 }
Listing2501.java
Listing 25.1: Darstellung des Farbenkreises

Das Programm arbeitet in der Weise, dass für jeden einzelnen Punkt der Zeichenfläche berechnet wird, ob dieser in einem der drei Kreise liegt. Ist dies der Fall, so wird die zugehörige Farbkomponente auf 255 gesetzt, andernfalls auf 0. Die Bestimmung der Kreiszugehörigkeit erfolgt mit Hilfe des Satzes von Pythagoras, nach dem ein Punkt genau dann zu einem Kreis gehört, wenn die Summe der Quadrate der Abstände vom x- und y-Wert zum Mittelpunkt kleiner gleich dem Quadrat des Radius ist. Die drei Mittelpunkte werden in unserem Beispiel in den Arrays arx und ary, die Radien der Kreise in arr gespeichert. Die boolesche Variable paintit zeigt an, ob der Punkt in wenigstens einem der drei Kreise liegt und daher überhaupt eine Ausgabe erforderlich ist.

 Hinweis 

Abbildung 25.1: Der Farbenkreis


 Titel   Inhalt   Suchen   Index   DOC  Handbuch der Java-Programmierung, 5. Auflage, Addison Wesley, Version 5.0.2
 <<    <     >    >>   API  © 1998, 2007 Guido Krüger & Thomas Stark, http://www.javabuch.de