文档

Java™教程
隐藏目录
如何使用颜色选择器
指南:使用Swing创建GUI
课程:使用Swing组件
章节:如何使用各种组件

如何使用颜色选择器

使用JColorChooser类允许用户从调色板中选择颜色。颜色选择器是您可以在程序GUI中的任何位置放置的组件。 JColorChooser API还可以轻松地弹出包含颜色选择器的对话框(模态或非模态)。

这是一个应用程序的图片,它使用颜色选择器来设置横幅中的文本颜色:

ColorChooserDemo的快照,其中包含一个标准的颜色选择器。

请尝试以下操作: 

程序的源代码位于ColorChooserDemo.java中。

颜色选择器包括标有选择文本颜色的框内的所有内容。这是Java外观中标准颜色选择器的外观。它包含两个部分,一个选项卡窗格和一个预览面板。选项卡窗格中的三个选项卡选择了选择器面板。选项卡窗格下方的预览面板显示当前选择的颜色。

以下是示例代码中创建JColorChooser实例并将其添加到容器中的代码:

public class ColorChooserDemo extends JPanel ... {
    public ColorChooserDemo() {
        super(new BorderLayout());
        banner = new JLabel("Welcome to the Tutorial Zone!",
                            JLabel.CENTER);
        banner.setForeground(Color.yellow);
        . . .
        tcc = new JColorChooser(banner.getForeground());
        . . .
        add(tcc, BorderLayout.PAGE_END);
    }

上述代码片段中的JColorChooser构造函数接受一个Color参数,指定了选择器的初始选定颜色。如果不指定初始颜色,则颜色选择器显示Color.white。请参阅Color API文档,了解可用的颜色常量列表。

颜色选择器使用一个实例 ColorSelectionModel 来包含和管理当前选择。当用户在颜色选择器中更改颜色时,颜色选择模型会触发一个更改事件。示例程序使用颜色选择模型注册了一个更改监听器,以便在窗口顶部更新横幅。以下代码注册并实现了更改监听器:

tcc.getSelectionModel().addChangeListener(this);
. . .
public void stateChanged(ChangeEvent e) {
    Color newColor = tcc.getColor();
    banner.setForeground(newColor);
}

有关更改监听器和更改事件的一般信息,请参见如何编写更改监听器

一个基本的颜色选择器,像示例程序中使用的那样,对于许多程序来说已经足够了。然而,颜色选择器API允许您通过为其提供自己设计的预览面板,通过向其添加自己的选择面板,或通过从颜色选择器中删除现有的选择面板来自定义颜色选择器。此外,JColorChooser类提供了两种方法,可以方便地在对话框中使用颜色选择器。

本节的其余部分将讨论以下主题:

另一个示例:ColorChooserDemo2

现在让我们关注ColorChooserDemo2,这是前一个演示程序的修改版本,它使用了更多的JColorChooserAPI。


请尝试以下操作: 

这是ColorChooserDemo2的图片:

ColorChooserDemo的快照,其中包含一个自定义颜色选择器。

该程序对横幅文本颜色选择器进行以下定制:

移除或替换预览面板介绍了第一个定制。 创建自定义选择器面板讨论了后两个。

该程序还添加了一个按钮,点击按钮会弹出一个颜色选择器对话框,您可以使用该对话框来设置横幅的背景颜色。

在对话框中显示颜色选择器

JColorChooser类提供了两个类方法,使得在对话框中使用颜色选择器变得很容易。ColorChooserDemo2使用其中一个方法showDialog,当用户点击显示颜色选择器...按钮时,会显示背景颜色选择器。以下是示例中的单行代码,用于在对话框中显示背景颜色选择器:

Color newColor = JColorChooser.showDialog(
                     ColorChooserDemo2.this,
                     "选择背景颜色",
                     banner.getBackground());

第一个参数是对话框的父级,第二个参数是对话框的标题,第三个参数是初始选定的颜色。

对话框在以下三种情况下消失:用户选择颜色并点击确定按钮,用户使用取消按钮取消操作,或用户使用框架控件关闭对话框。如果用户选择了颜色,showDialog方法会返回新的颜色。如果用户取消操作或关闭窗口,该方法会返回null。以下是示例中根据showDialog返回的值更新横幅背景颜色的代码:

if (newColor != null) {
    banner.setBackground(newColor);
}

showDialog创建的对话框是模态的。如果您想要一个非模态对话框,可以使用JColorChoosercreateDialog方法创建对话框。该方法还可以让您为对话框窗口的确定取消按钮指定动作监听器。使用JDialogshow方法来显示该方法创建的对话框。有关使用此方法的示例,请参见指定其他编辑器中的如何使用表格部分。

移除或替换预览面板

默认情况下,颜色选择器显示预览面板。ColorChooserDemo2使用以下代码移除文本颜色选择器的预览面板:

tcc.setPreviewPanel(new JPanel());

这实际上是移除了预览面板,因为一个普通的JPanel没有大小和默认视图。要将预览面板设置回默认值,可以将null作为参数传递给setPreviewPanel方法。

要提供自定义的预览面板,也可以使用setPreviewPanel方法。传递给该方法的组件应该继承自JComponent,指定一个合理的大小,并提供当前颜色的自定义视图。要在用户更改颜色选择器中的颜色时得到通知,预览面板必须像之前描述的那样在颜色选择器的颜色选择模型上注册为更改监听器。

创建自定义选择器面板

默认的颜色选择器提供了五个选择器面板:

您可以通过使用addChooserPanel来扩展默认的颜色选择器,并添加自己设计的选择器面板,或者通过使用removeChooserPanel来限制选择器面板的数量。

如果您想要移除所有默认的选择器面板,并添加一个或多个自己的选择器面板,可以通过一次调用setChooserPanels来实现。ColorChooserDemo2使用这个方法将默认的选择器面板替换为CrayonPanel的实例,一个自定义的选择器面板。以下是来自该示例的setChooserPanels方法的调用:

//Override the chooser panels with our own.
AbstractColorChooserPanel panels[] = { new CrayonPanel() };
tcc.setChooserPanels(panels);

这段代码很简单:它创建一个包含CrayonPanel的数组。接下来,代码调用setChooserPanels将数组的内容设置为颜色选择器的选择器面板。

CrayonPanelAbstractColorChooserPanel的子类,并重写了其超类中定义的五个抽象方法:

void buildChooser()
创建组成选择器面板的GUI。该示例创建了四个切换按钮 - 每个按钮代表一种颜色,并将它们添加到选择器面板中。
void updateChooser()
每当选择器面板显示时调用此方法。该方法的实现会选择表示当前选定颜色的切换按钮。
public void updateChooser() {
    Color color = getColorFromModel();
    if (Color.red.equals(color)) {
        redCrayon.setSelected(true);
    } else if (Color.yellow.equals(color)) {
        yellowCrayon.setSelected(true);
    } else if (Color.green.equals(color)) {
        greenCrayon.setSelected(true);
    } else if (Color.blue.equals(color)) {
        blueCrayon.setSelected(true);
    }
}
String getDisplayName()
返回选择器面板的显示名称。该名称将用于选择器面板的选项卡上。以下是示例的getDisplayName方法:
public String getDisplayName() {
    return "蜡笔";
}
Icon getSmallDisplayIcon()
返回表示此选择器面板的小图标。目前未使用。将来版本的颜色选择器可能会使用此图标或大图标来表示该选择器面板在显示中的位置。该方法的示例实现返回null
Icon getLargeDisplayIcon()
返回表示此选择器面板的大图标。目前未使用。将来版本的颜色选择器可能会使用此图标或小图标来表示该选择器面板在显示中的位置。该方法的示例实现返回null

颜色选择器API

以下表列出了常用的JColorChooser构造函数和方法。您可能会调用其他方法,这些方法在JComponent类的API表中列出。使用颜色选择器的API可分为以下几类:

创建和显示颜色选择器
方法或构造函数 目的
JColorChooser()
JColorChooser(Color)
JColorChooser(ColorSelectionModel)
创建一个颜色选择器。默认构造函数创建一个初始颜色为Color.white的颜色选择器。使用第二个构造函数来指定不同的初始颜色。当存在ColorSelectionModel参数时,为颜色选择器提供一个颜色选择模型。
Color showDialog(Component, String, Color) 创建并显示一个模态对话框中的颜色选择器。Component参数是对话框的父组件,String参数指定对话框的标题,Color参数指定选择器的初始颜色。
JDialog createDialog(Component, String,
boolean, JColorChooser, ActionListener,
ActionListener)
为指定的颜色选择器创建一个对话框。与showDialog一样,Component参数是对话框的父组件,String参数指定对话框的标题。其他参数如下:boolean指定对话框是否为模态,JColorChooser是要在对话框中显示的颜色选择器,第一个ActionListener用于确定按钮,第二个用于取消按钮。
自定义颜色选择器的GUI
方法 目的
void setPreviewPanel(JComponent)
JComponent getPreviewPanel()
设置或获取用于预览颜色选择的组件。要移除预览面板,请使用new JPanel()作为参数。要指定默认预览面板,请使用null
void setChooserPanels(AbstractColorChooserPanel[])
AbstractColorChooserPanel[] getChooserPanels()
设置或获取颜色选择器中的选择器面板。
void addChooserPanel(AbstractColorChooserPanel)
AbstractColorChooserPanel removeChooserPanel(AbstractColorChooserPanel)
将一个选择器面板添加到颜色选择器中,或从中移除一个选择器面板。
void setDragEnabled(boolean)
boolean getDragEnabled()
设置或获取dragEnabled属性,该属性必须为true才能在该组件上启用拖放处理。默认值为false。详细信息请参阅拖放和数据传输
设置或获取当前颜色
方法 目的
void setColor(Color)
void setColor(int, int, int)
void setColor(int)
Color getColor()
设置或获取当前选中的颜色。setColor方法的三个整数版本将三个整数一起解释为RGB颜色。setColor方法的单个整数版本将整数分为四个8位字节,并将整数解释为RGB颜色,如下所示:颜色选择器如何将int解释为RGB值。
void setSelectionModel(ColorSelectionModel)
ColorSelectionModel getSelectionModel()
设置或获取颜色选择器的选择模型。该对象包含当前选择并在选择更改时向注册的监听器触发更改事件。

使用颜色选择器的示例

此表显示使用JColorChooser的示例以及这些示例的描述位置。

示例 描述位置 备注
ColorChooserDemo 本节 使用标准颜色选择器。
ColorChooserDemo2 本节 在使用showDialog创建的对话框中使用一个自定义颜色选择器和一个标准颜色选择器。
TableDialogEditDemo 如何使用表格 演示如何在表格中使用颜色选择器作为自定义单元格编辑器。此示例使用createDialog创建的颜色选择器。
BasicDnD DnD简介 使用不在对话框中的颜色选择器;演示Swing组件的默认拖放功能,包括颜色选择器。

上一页: 如何使用ButtonGroup组件
下一页: 如何使用组合框