我们刚刚所讲的JColorChooser都是以对话框的形式出现.事实上JColorChooser可以置于一般的java容器上,不过这时候你就必 须实际构造出JColorChooser对象,并使用ColorSelectionModel来管理用户所选择的颜色.ColorSelectionModel本身是个interface .里面定义一些用户选择颜色或设置颜色的方法,并有addChangeListener()方法来检测用户是否改变了颜色的选择.要使用到 ColorSelectionModel Interface所定义的方法,理论上我们必须实现它,然而java本身可利用JColorChooser所提供的 getSelectionModel()方法得到ColorSelectionModel的实体.这时候就可以直接以ColorSelectionModel的addChangeListener()方法 来检测用户是否对颜色的选择有所改变,而不需要再另外实现这些方法.
每当用户JColorChooser上做一次颜色的改变时,就会触发ChangeEvent事件,因此我们必须实现ChangeListener界面来处理这个 事件.此界面只定义了一个方法,那就是stateChanged().下面范例我们将JColorChooser放在JPanel上,并在label上输出用户所选择 的颜色与颜色参数.
import java.awt.*; import java.awt.event.*;//ChangeEvent是Swing的事件,因此我们必须将Swing的event package import进来. import javax.swing.*; import javax.swing.colorchooser.*; import javax.swing.event.*; public class ColorChooserDemo3 implements ChangeListener { JFrame f = null; JLabel label = null; JColorChooser colorChooser = null; public ColorChooserDemo3() { f = new JFrame("ColorChooser Example"); Container contentPane = f.getContentPane(); label = new JLabel(" ", JLabel.CENTER); // 设定label背景颜色为不透明,这样才可以将label的背景颜色显示出来 label.setOpaque(true); // 设定label上字体的颜色,也就是label的前景颜色 label.setForeground(Color.black); JPanel panel = new JPanel(); /* * 建立一个JColorChooser对象,并以getSelectionModel()方法取得ColorSelectionModel实体,并在这个实体上以 * addChangeListener()方法检测用户是否有改变颜色. */ colorChooser = new JColorChooser(); /**** add code ***/ // 此处为下面"13-2-4中所要加代码的区块" /**** add code ***/ panel.add(colorChooser); ColorSelectionModel selectModel = colorChooser.getSelectionModel(); selectModel.addChangeListener(this); contentPane.add(label, BorderLayout.NORTH); contentPane.add(panel, BorderLayout.CENTER); f.pack(); f.setVisible(true); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[] arg) { new ColorChooserDemo3(); } // 实现ChangeListener // Interface,stateChanged()方法是在处理ChangeEvent事件.当用户改变颜色的选择时,我们就在label // 输出用户所选择的颜色,并显示颜色参数. public void stateChanged(ChangeEvent e) { Color color = colorChooser.getColor(); label.setBackground(color); label.setText("您选择的颜色参数为:R:" + color.getRed() + " G:" + color.getGreen() + " B:" + color.getBlue()); } }