Der Farbauswahldialog JColorChooser

Mit einem JColorChooser lassen sich Farben in drei unterschiedlichen Reitern auswählen. Der Benutzer hat die Auswahl zwischen vordefinierten Farben, HSB-Werten und RGB-Werten. Um den Farbauswahldialog auf den Bildschirm zu bekommen, genügt ein Aufruf von JColorChooser.showDialog() mit drei Argumenten: einem Component-Objekt (dem Vater des Dialogs), dem Titel und einer Anfangsfarbe. Beendet der Benutzer den Dialog, wird als Rückgabe-wert die ausgewählte Farbe geliefert. Wird der Dialog abgebrochen, so ist der Rückgabewert null.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JColorChooserDemo
{
 public static void main( String[] args )
 {
  JFrame f = new JFrame();
  f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
  JButton b = new JButton( "Farbe ändern" );
  f.add( b );
  b.addActionListener( new ActionListener() {
   public void actionPerformed( ActionEvent e ) {
    Component comp = (Component) e.getSource();
    Color newColor = JColorChooser.showDialog( null, "Wähle neue Farbe", comp.getBackground() );
    comp.setBackground( newColor );
   }
  } );
  f.pack();
  f.setVisible( true );
 }
}

Den Aufruf mit showDialog() einzuleiten, ist nicht der einzige Weg. Wir können auch den Konstruk-tor nutzen und dieses Exemplar später mit JColorChooser.createDialog() übergeben und anzeigen.

class javax.swing.JColorChooser extends JComponent implements Accessible

  • JColorChooser()
    Erzeugt einen neuen Farbauswahldialog.
  • JColorChooser( Color c )
    Erzeugt einen neuen Farbauswahldialog mit einer vordefinierten Farbe.
  • static Color showDialog( Component c, String title, Color initialColor )
    Zeigt einen modalen Farbauswahldialog.
  • static JDialog createDialog( Component c, String title, boolean modal, JColorChooser chooserPane, ActionListener okLis,  ActionListener cancelLis )
    Erzeugt einen neuen Dialog aufgrund des JColorChooser-Objekts mit Standardschaltflächen zum Bestätigen und Abbrechen.

JColorChooser-Objekte als spezielle Komponenten

Neben der statischen Methode showDialog() lässt sich auch der Konstruktor nutzen, um ein JColorChooser als spezielles JComponent-Objekt aufzubauen. Das bringt den Vorteil mit sich, dass die Farbauswahl nicht zwingend in einem eigenständigen Dialog stattfinden muss, sondern im Fall einer Komponente diese zusammen mit anderen Komponenten auf einen Container gesetzt werden kann. Änderungen an der Auswahl registriert ein ChangeListener, der etwa so angewendet wird:

chooser.getSelectionModel().addChangeListener( new ChangeListener() {
 public void stateChanged( ChangeEvent e ) {
  Color c = ((ColorSelectionModel) e.getSource()).getSelectedColor();
 }
} ) ;

Weitere Beispiele finden sich beim Java Developers Almanac unter http://javaalmanac.com/egs/javax.swing.colorchooser/pkg.html. Die Themen sind unter anderem: Anpassen der Anzeige und Umsortierung der Reiter. Üblich sind drei Reiter mit den Aufschriften „Muster“ (auf einer englischsprachigen Oberfläche „Swatch“), HSB und RGB. Wie ein neuer Reiter mit einer Graustufenanzeige eingebracht wird, zeigt http://www.java2s.com/Code/Java/Swing-JFC/JColorChooserdialogwiththecustomGrayScalePanelpickertab.htm

.