我们刚刚所讲的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());
}
}