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

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


 Titel   Inhalt   Suchen   Index   DOC  Handbuch der Java-Programmierung, 7. Auflage, Addison Wesley, Version 7.0
 <<    <     >    >>   API  © 1998, 2011 Guido Krüger & Heiko Hansen, http://www.javabuch.de