如何使用颜色 selectors

使用JColorChooser类可以使用户从调色板中进行选择。颜色 selectors 是一个组件,您可以将其放置在程序 GUI 中的任何位置。 JColorChooser API 还可以轻松调出包含颜色 selectors 的dialog(是否为模态)。

这是使用颜色 selectors 设置横幅中文本颜色的应用程序的图片:

Try this:

该程序的源代码在ColorChooserDemo.java中。

颜色 selectors 由 Choose Text Color 框中的所有内容组成。这就是标准的颜色 selectors 在 Java Look&Feel 中的外观。它包含两个部分,一个选项卡式窗格和一个预览面板。选项卡式窗格中的三个选项卡选择*“selectors 面板” *。选项卡式窗格下面的“预览面板”显示当前选择的颜色。

这是示例中创建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参数,该参数指定 selectors 最初选择的颜色。如果未指定初始颜色,则颜色 selectors 显示Color.white。有关可以使用的颜色常量的列表,请参见Color API 文档

颜色 selectors 使用以下实例 ColorSelectionModel以包含和 管理 当前选择。每当用户在颜色 selectors 中更改颜色时,颜色选择模型就会触发更改事件。该示例程序向颜色选择模型注册了一个更改侦听器,以便它可以更新窗口顶部的标题。以下代码注册并实现更改侦听器:

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

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

与示例程序中使用的颜色 selectors 一样,一种基本的颜色 selectors 对于许多程序就足够了。但是,颜色 selectorsAPI 允许您通过为颜色 selectors 提供自己设计的预览面板,向其添加您自己的 selectors 面板或从颜色 selectors 中删除现有的 selectors 面板来自定义颜色 selectors。此外,JColorChooser类提供了两种方法,可轻松在对话框中使用颜色 selectors。

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

另一个示例:ColorChooserDemo2

现在,我们将注意力转向ColorChooserDemo2,它是先前演示程序的修改版本,它使用了更多的JColorChooser API。

Try this:

这是 ColorChooserDemo2 的图片:

该程序通过以下方式自定义横幅文本颜色 selectors:

卸下或装回预览面板涵盖了第一个定制。 创建自定义 selectors 面板讨论了最后两个。

该程序还添加了一个在对话框中弹出颜色 selectors 的按钮,您可以使用该按钮设置横幅背景色。

在对话框中显示颜色 selectors

JColorChooser类提供了两种类方法,可轻松在对话框中使用颜色 selectors。当用户单击“显示颜色 selectors...”按钮时,ColorChooserDemo2 使用其中一种方法showDialog来显示背景颜色 selectors。这是示例中的单行代码,它在对话框中显示背景颜色 selectors:

Color newColor = JColorChooser.showDialog(
                     ColorChooserDemo2.this,
                     "Choose Background Color",
                     banner.getBackground());

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

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

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

showDialog创建的对话框是 Pattern 对话框。如果要使用非 Pattern 对话框,则可以使用JColorChoosercreateDialog方法创建对话框。此方法还允许您为对话框窗口中的“确定”和“取消”按钮指定动作侦听器。使用JDialogshow方法显示由该方法创建的对话框。有关使用此方法的示例,请参见如何使用表格部分中的指定其他编辑者

卸下或装回预览面板

默认情况下,颜色 selectors 显示预览面板。 ColorChooserDemo2 使用以下代码行删除文本颜色 selectors 的预览面板:

tcc.setPreviewPanel(new JPanel());

由于普通的JPanel没有大小且没有默认视图,因此可以有效地删除预览面板。要将预览面板设置回默认值,请使用null作为setPreviewPanel的参数。

要提供自定义预览面板,您还可以使用setPreviewPanel。传递给方法的组件应继承JComponent,指定合理的大小,并提供当前颜色的自定义视图。要在用户更改颜色 selectors 中的颜色时得到通知,预览面板必须注册为颜色 selectors 的颜色选择模型上的更改侦听器,如previously所述。

创建自定义 selectors 面板

默认颜色 selectors 提供五个 selectors 面板:

您可以通过使用addChooserPanel添加您自己的设计 selectors 面板来扩展默认颜色 selectors,或者可以通过使用removeChooserPanel删除 selectors 面板来限制默认颜色 selectors。

如果要删除所有默认 selectors 面板并添加一个或多个自己的 selectors 面板,可以通过一次调用setChooserPanels来完成。 ColorChooserDemo2 使用此方法将默认 selectors 面板替换为自定义 selectors 面板CrayonPanel的实例。这是该示例对setChooserPanels的调用:

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

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

CrayonPanelAbstractColorChooserPanel的子类,并覆盖其超类中定义的五个抽象方法:

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);
    }
}
public String getDisplayName() {
    return "Crayons";
}

颜色 selectorsAPI

下表列出了常用的JColorChooser构造函数和方法。 JComponent 类的 API 表中列出了您可能调用的其他方法。使用颜色 selectors 的 API 分为以下几类:

创建和显示颜色 selectors

方法或构造函数 Purpose
JColorChooser()

JColorChooser(Color)
JColorChooser(ColorSelectionModel)
创建颜色 selectors。默认构造函数创建初始颜色为Color.white的颜色 selectors。使用第二个构造函数来指定其他初始颜色。 ColorSelectionModel参数(如果存在)为颜色 selectors 提供颜色选择模型。
颜色 showDialog(Component,String,Color) 在 Pattern 对话框中创建并显示颜色 selectors。 Component参数是对话框的父级,String参数指定对话框的标题,Color参数指定 selectors 的初始颜色。
JDialog createDialog(Component,String,boolean,JColorChooser,ActionListener,ActionListener) 为指定的颜色 selectors 创建一个对话框。与showDialog一样,Component参数是对话框的父级,而String参数指定对话框的标题。其他参数如下:boolean指定对话框是否为模态对话框,JColorChooser是要在对话框中显示的颜色 selectors,第一个ActionListener用于 OK 按钮,第二个用于取消。 **按钮。

自定义颜色 selectors 的 GUI

Method Purpose
void setPreviewPanel(JComponent)

JComponent getPreviewPanel()
设置或获取用于预览颜色选择的组件。要删除预览面板,请使用new JPanel()作为参数。要指定默认的预览面板,请使用null
void setChooserPanels(AbstractColorChooserPanel[])
AbstractColorChooserPanel[] getChooserPanels()
在颜色 selectors 中设置或获取 selectors 面板。
void addChooserPanel(AbstractColorChooserPanel)
AbstractColorChooserPanel removeChooserPanel(AbstractColorChooserPanel)
将 selectors 面板添加到颜色 selectors 或从中删除 selectors 面板。
void setDragEnabled(boolean)
boolean getDragEnabled()
设置或获取dragEnabled属性,该属性必须为 true 以启用对此组件的拖动处理。默认值为 false。有关更多详细信息,请参见拖放和数据传输

设置或获取当前颜色

Method Purpose
void setColor(Color)

void setColor(int,int,int)
void setColor(int)
Color getColor()
设置或获取当前选择的颜色。 setColor方法的三个整数版本将这三个整数一起解释为 RGB 颜色。 setColor方法的单个整数版本将整数分为四个 8 位字节,并将该整数解释为 RGB 颜色,如下所示:
void setSelectionModel(ColorSelectionModel)
ColorSelectionModel getSelectionModel()
设置或获取颜色 selectors 的选择模型。该对象包含当前选择,并且只要选择发生更改,就会向注册的侦听器触发更改事件。

使用颜色 selectors 的示例

下表显示了使用JColorChooser的示例,并在其中描述了这些示例。

Example Where Described Notes
ColorChooserDemo This section 使用标准的颜色 selectors。
ColorChooserDemo2 This section 在使用showDialog创建的对话框中使用一个自定义的颜色 selectors 和一个标准的颜色 selectors。
TableDialogEditDemo 如何使用表格 显示如何将颜色 selectors 用作表中的自定义单元格编辑器。本示例使用的颜色 selectors 是使用createDialog创建的。
BasicDnD DnD 简介 使用不在对话框中的颜色 selectors;演示了 Swing 组件(包括颜色 selectors)的默认拖放功能。
首页