Tit   Inh   Ind   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   <<   <   >   >> 

16.3 Verwenden von Farben



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

 Beispiel 

Das Programm arbeitet in der Weise, daß 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 16.1: Der Farbenkreis


 Tit   Inh   Ind   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   <<   <   >   >> 
Go To Java 2, Addison Wesley, Version 1.0.2, © 1999 Guido Krüger, http://www.gkrueger.com