import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.colorchooser.*; public class ColorChooserDemo2 extends JFrame { public ColorChooserDemo2() { super("ColorChooserDemo2"); //Set up the banner at the top of the window final Banner banner = new Banner(); banner.setPreferredSize(new Dimension(100, 90)); banner.setBorder(BorderFactory.createTitledBorder("Banner")); //Set up color chooser for setting text and its color JPanel panel = new JPanel(); JButton chooseTextColor = new JButton("Choose Text Color..."); chooseTextColor.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { Color newColor = JColorChooser.showDialog( ColorChooserDemo2.this, "Choose Text Color", banner.getTextColor()); if (newColor != null) { banner.setTextColor(newColor); } } } ); final JTextField textToShow = new JTextField(banner.getText()); textToShow.setMargin(new Insets(5,5,5,5)); textToShow.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { banner.setText(textToShow.getText()); } } ); panel.add(textToShow); panel.add(chooseTextColor); panel.setBorder(BorderFactory.createTitledBorder("Text")); //Set up color chooser for setting background color final JColorChooser colorChooser = new JColorChooser(banner.getColor()); //XXXX: bug #4166059, trying to replace the //preview panel doesn't work. //colorChooser.setPreviewPanel(new JPanel()); colorChooser.getSelectionModel().addChangeListener( new ChangeListener() { public void stateChanged(ChangeEvent e) { Color newColor = colorChooser.getColor(); banner.setColor(newColor); } } ); //Remove the default chooser panels AbstractColorChooserPanel panels[] = colorChooser.getChooserPanels(); for (int i = 0; i < panels.length; i ++) { colorChooser.removeChooserPanel(panels[i]); } //Add a custom chooser panel to the color chooser. //XXXXXX: bug #4166858, the following doesn't work //colorChooser.addChooserPanel(new CrayonPanel()); //do the same thing with a workaround //begin workaround AbstractColorChooserPanel[] oldPanels = colorChooser.getChooserPanels(); AbstractColorChooserPanel[] newPanels = new AbstractColorChooserPanel[oldPanels.length+1]; System.arraycopy(oldPanels, 0, newPanels, 0, oldPanels.length); newPanels[newPanels.length-1] = new CrayonPanel(); colorChooser.setChooserPanels(newPanels); //end workaround colorChooser.setBorder(BorderFactory.createTitledBorder( "Choose Background Color")); getContentPane().add(banner, BorderLayout.NORTH); getContentPane().add(panel, BorderLayout.CENTER); getContentPane().add(colorChooser, BorderLayout.SOUTH); } public static void main(String[] args) { JFrame frame = new ColorChooserDemo2(); WindowListener l = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; frame.addWindowListener(l); frame.pack(); frame.setVisible(true); } }