java.lang.Object --java.awt.Component --java.awt.Container --javax.swing.JComponent --javax.swing.JColorChooser
Color Chooser可以让你选择所想要的颜色,并更改某个组件的颜色.例如在小画家中,你可以在画板上画上图案,并选择各式各样 的颜色来加以装饰;至于颜色的选择上,你可以在小画家中找到颜色选择对话框.
最常使用JColorChooser的方式是使用JColorChooser的静态方法showDialog().也就是说在大部份的情况下,我们不会new一个 JColorChooser对象,而是直接使用JColorChooser的静态方法(showDialog())来输出颜色选择对话框.利用这个方法我们亦可以得到 用户所选择的颜色,若用户没有选择则返回null值.
另外还有一个使用JColorChooser常用的方式,那就是使用createDialog()静态方法.使用这个静态方法后会得到一个JDialog对 象,我们可以利用这个JDialog对象对颜色选择对话框做更多的设置.不过利用这个方法必须配合JColorChooser对象才行,也就是必须 new出一个JColorChooser对象来.下面范例我们先介绍第一种最简单的也是最实用的JColorChooser选择颜色完毕后就能更改JLabel 上的背景颜色.
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import com.incors.plaf.alloy.*; import com.incors.plaf.alloy.themes.glass.*; public class ColorChooserDemo1 extends MouseAdapter { JFrame f = null; JLabel label = null; JLabel label1 = null; JLabel label2 = null; Rectangle rec1 = null; Rectangle rec2 = null; public ColorChooserDemo1() { f = new JFrame("ColorChooser Example"); Container contentPane = f.getContentPane(); contentPane.addMouseListener(this); label = new JLabel(" ", JLabel.CENTER); label.setPreferredSize(new Dimension(300, 20)); JPanel panel = new JPanel(); panel.setLayout(new GridLayout(1, 2)); label1 = new JLabel("左Label", JLabel.CENTER); label1.setBackground(Color.red); label1.setForeground(Color.black); label1.setOpaque(true); label1.setBounds(0, 0, 150, 150); panel.add(label1); label2 = new JLabel("右Label", JLabel.CENTER); label2.setBackground(Color.green); label2.setForeground(Color.black); label2.setOpaque(true); label2.setBounds(150, 0, 150, 150); panel.add(label2); rec1 = label1.getBounds(); rec2 = label2.getBounds(); contentPane.add(panel, BorderLayout.CENTER); contentPane.add(label, BorderLayout.SOUTH); f.setSize(new Dimension(300, 150)); f.setVisible(true); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[] arg) { SwingUtil.setLookAndFeel(); new ColorChooserDemo1(); } // 实现MouseAdapter中的mousePressed()与mouseClicked()方法.当按下鼠标时,就能知道鼠标光标目前的位置.当连续键击鼠标 // 两次时,若光标所在位置在label中,就会出现颜色选择对话框,用户可选择任一颜色更改label的颜色. public void mousePressed(MouseEvent e) { label.setText("目前鼠标坐标(X,Y)为:(" + e.getX() + "," + e.getY() + ")"); } public void mouseClicked(MouseEvent e) { Point point = e.getPoint(); if (e.getClickCount() == 2) { if (rec1.contains(point)) { /* * 利用JColorChooser的showDialog()静态方法输出颜色选择对话框 * ,showDialog()中的3个参数依次是: * 对话框的父组件,颜色选择对话框标题 * ,与对话框默认颜色.当用户选择完颜色之后,按下"OK"按钮则返回 * Color对象,若按下"Cancel"按钮则返回null值. */ Color color = JColorChooser.showDialog(f, "Change label1 Color", Color.white); if (color != null) // 若为null值表示用户按下Cancel按钮 label1.setBackground(color); } if (rec2.contains(point)) { Color color = JColorChooser.showDialog(f, "Change label2 Color", Color.yellow); if (color != null) // 若为null值表示用户按下Cancel按钮 label2.setBackground(color); } } } } class SwingUtil { public static final void setLookAndFeel() { try { Font font = new Font("JFrame", Font.PLAIN, 12); Enumeration keys = UIManager.getLookAndFeelDefaults().keys(); while (keys.hasMoreElements()) { Object key = keys.nextElement(); if (UIManager.get(key) instanceof Font) { UIManager.put(key, font); } } AlloyLookAndFeel.setProperty("alloy.isLookAndFeelFrameDecoration", "true"); AlloyTheme theme = new GlassTheme(); LookAndFeel alloyLnF = new AlloyLookAndFeel(theme); UIManager.setLookAndFeel(alloyLnF); } catch (UnsupportedLookAndFeelException ex) { ex.printStackTrace(); } } }