ITEEDU

13-2-3:将JColorChooser置于一般容器中显示.

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