Literatur

JColorChooser

Ein Dialog zur Farbauswahl wird von der Klasse javax.swing.JColorChooser bereit gestellt. Die Klasse JColorChooser kann sowohl in eigene Container eingebettet werden als auch selbst in einem eigenen Dialog erscheinen. Sie dient der Farbauswahl. Farbauswahl-Dialoge dürften den meisten aus anderen Anwendungen bekannt sein (Office-Anwendungen, Bildbearbeitungsprogramme...). Dort kann man mit Hilfe eines solchen Dialoges z.B. die Textfarbe ändern oder den Hintergrund einfärben. Die Klasse JColorChooser stellt ausschließlich die Oberfläche für die Farbauswahl bereit, die gewünschte Funktionalität, also was mit der ausgewählten Farbe gemacht wird, muss vom Programmierer selber implementiert werden.

Schauen wir uns dazu einmal ein einfaches Beispiel an, in dem wir einfach den JColorChooser in einem vorgefertigten Dialog anzeigen:

import java.awt.Color;
import javax.swing.JColorChooser;
 
public class FarbauswahlBeispiel
{
    // main-Methode
    public static void main(String[] args)
    {
        // Erstellung eines JColorChooser Dialoges, 
        // der eine Farbe zurück gibt
        Color ausgewaehlteFarbe = JColorChooser.showDialog(null, 
            "Farbauswahl", null);
        // Ausgabe der ausgewählten Farbe
        System.out.println(ausgewaehlteFarbe);
    }
}

Wie Sie an dem obigen Beispiel sehen, erzeugen wir im Gegensatz zu den bereits vorgestellten Fensterklassen kein explizites Objekt der Klasse JColorChooser. Die Klasse JColorChooser besitzt eine statische Methode showDialog, die uns einen vorgefertigten Dialog bereitstellt. Dieser erscheint, wenn wir den obigen Quellcode ausführen:

JColorChooser, Farbauswahl Beispiel

Zum besseren Verständnis schauen wir uns jetzt einmal die Methode showDialog näher an:

public static Color showDialog(Component component, String title, 
    Color initialColor) throws HeadlessException

Zuerst stellen wir fest, dass die Methode das Schlüsselwort static besitzt und damit als statisch deklariert wurde. Wie wir ja in den Grundlagen gelernt haben, heißt dies, dass die Methode nicht an ein Objekt gebunden ist, sondern für die ganze Klasse gilt. Daher brauchen wir kein Objekt erzeugen und können die Methode direkt aufrufen. Der Rückgabewert der Methode ist vom Typ Color (auf die  Klasse Color  gehen wir im folgenden Unterkapitel näher ein). Der erste Übergabeparameter muss vom Typ Component sein. Dies ist die Basisklasse aller grafischen Komponenten in Java. Gemeint ist in diesem Fall die Elternkomponente. Dieser Wert kann gesetzt sein, wenn wir die Eigenschaften eines modalen Dialoges unserer Klasse JColorChooser nutzen wollen, wie es in einer Anwendung auch der Regelfall ist. In dem obigen Beispiel haben wir jedoch die null-Referenz übergeben, da wir lediglich den Farbauswahldialog anzeigen wollen.

Als zweiten Parameter erwartet showDialog einen String. Der String erscheint als Titel des Farbauswahldialoges. Der dritte Parameter ist vom Typ Color. Dabei handelt es sich um die Farbe, die beim Öffnen des Dialoges ausgewählt sein soll. Da wir uns aber noch nicht mit Farben beschäftigt haben, übergeben wir hier auch eine null-Referenz.

Die Methode showDialog kann eine HeadlessException werfen. Diese würde allerdings in unserem Beispiel nur auftreten, wenn wir den Quellcode auf einem System ausführen, welches nur eine Kommandozeilenausgabe unterstützt.  Da wir hier davon ausgehen, dass Sie unser Beispiel auf einem Betriebssystem mit grafischer Benutzeroberfläche ausführen, lassen wir diese Exception unberücksichtigt.

In dem obigen Beispiel speichern wir den Rückgabewert in der lokalen Variablen ausgewaehlteFarbe. Dabei handelt es sich entweder um eine null-Referenz, wenn der Button "Abbrechen" gedrückt wurde oder den im Farbauswahldialog ausgewählten Farbwert. Anschließend geben wir den Wert der Variablen aus.

Das war das einfachste Beispiel zur Verwendung von JColorChooser.

Der JColorChooser kann jedoch auch auf bekanntem Wege eingebunden werden, indem wir ein Objekt vom Typ JColorChooser erzeugen und hinzufügen. Dazu erweitern wir unser Beispiel aus dem Kapitel JFrame und binden in diesen Frame einen Farbauswahldialog ein:

import javax.swing.JColorChooser;
import javax.swing.JFrame;
 
public class ColorChooserFrame
{
    // main-Methode
    public static void main(String[] args)
    {
        // Erzeugung eines neuen Frames 
        // mit dem Titel "Mein JFrameBeispiel"         
        JFrame meinJFrame = new JFrame();
        meinJFrame.setTitle("Mein JFrame Beispiel");
        // Wir setzen die Breite auf 450 
        // und die Höhe auf 300 Pixel, 
        // damit unser JColorChooser hineinpasst
        meinJFrame.setSize(450,300);
        // Erzeugung eines Objektes der Klasse JColorChooser
        JColorChooser colorChooser = new JColorChooser();
        // Holt ContentPane von unserem Frame 
        // und fügt diesem unseren JColorChooser hinzu      
        meinJFrame.getContentPane().add(colorChooser);
        // Wir lassen unseren Frame anzeigen
        meinJFrame.setVisible(true);
    }
}

Wir haben unsere Beispiel Klasse aus dem JFrame-Kapitel umbenannt in ColorChooserFrame. Desweiteren haben wir eine Import-Anweisungen für die Klasse JColorChooser eingefügt. Die Größe unseres Frames vergrößern wir auf 450 x 300 Pixel, damit der gesamte Farbauswahldialog in unseren Frame passt. Anschließend erzeugen wir ein Objekt der Klasse JColorChooser. Danach holen wir uns den Container, der für den Inhalt unseres Frames verantwortlich ist, über die Methode getContentPane und fügen diesem unser Objekt für die Farbauswahl hinzu. Anschließend lassen wir den Frame anzeigen. Der folgende Screenshot zeigt unseren erstellten Frame mit dem hinzugefügten JColorChooser-Objekt:

JFrame mit JColorChooser

Was fällt uns direkt auf, wenn wir die beiden Screenshots vergleichen?

Wir hoffen, Sie haben gesehen, dass der erste Screenshot drei zusätzliche Schaltflächen besitzt: "Ok", "Abbrechen" und "Zurücksetzen". Der erste Beispiel-Code erlaubt es uns, die Farbauswahl ohne größeren Aufwand direkt zu nutzen. Im zweiten Beispiel allerdings müssten wir die Buttons und deren Funktion selbst implementieren. Die ausgewählte Farbe erhalt man in dem Falle des zweiten Beispiels nur über die Methode getColor, die wir über unser JColorChooser-Objekt aufrufen müssten.


Unterthemen: