Mit einem JColorChooser lassen sich Farben über drei unterschiedliche Reiter 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(Component, String, Color) mit drei Argumenten: einem Component-Objekt (dem Vater des Dialogs), dem Titel und einer Anfangsfarbe. Beendet der Benutzer den Dialog, wird als Rückgabewert die ausgewählte Farbe geliefert. Wird der Dialog abgebrochen, so ist der Rückgabewert null:
JFrame f = new JFrame(); f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); JButton b = new JButton( "Farbe ändern" ); f.add( b ); b.addActionListener( new ActionListener() { @Override 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 Konstruktor 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(Colorc)
Erzeugt einen neuen Farbauswahldialog mit einer vordefinierten Farbe. - staticColorshowDialog(Componentc,Stringtitle,ColorinitialColor)
Zeigt einen modalen Farbauswahldialog. - staticJDialogcreateDialog(Componentc,Stringtitle,booleanmodal,
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 dass 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() { @Override public void stateChanged( ChangeEvent e ) { Color c = ((ColorSelectionModel) e.getSource()).getSelectedColor(); } } );
Weitere Beispiele finden sich unter http://www.java2s.com/Code/Java/Swing-JFC/Color-Chooser.htm. Wie ein neuer Reiter mit über 50 Schattierungen in der Graustufenanzeige eingebracht wird, zeigt etwa http://www.java2s.com/Code/Java/Swing-JFC/JColorChooserdialogwiththecustomGrayScalePanelpickertab.htm.