如何使用颜色 selectors
使用JColorChooser类可以使用户从调色板中进行选择。颜色 selectors 是一个组件,您可以将其放置在程序 GUI 中的任何位置。 JColorChooser
API 还可以轻松调出包含颜色 selectors 的dialog(是否为模态)。
这是使用颜色 selectors 设置横幅中文本颜色的应用程序的图片:
Try this:
- 单击启动按钮以使用Java™Web 开始(下载 JDK)运行 ColorChooser 演示。另外,要自己编译和运行示例,请查阅example index。
该程序的源代码在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:
- 单击启动按钮以使用Java™Web 开始(下载 JDK)运行 ColorChooser 演示。另外,要自己编译和运行示例,请查阅example index。
这是 ColorChooserDemo2 的图片:
该程序通过以下方式自定义横幅文本颜色 selectors:
-
删除预览面板
-
删除所有默认 selectors 面板
-
添加自定义 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 对话框,则可以使用JColorChooser
的createDialog
方法创建对话框。此方法还允许您为对话框窗口中的“确定”和“取消”按钮指定动作侦听器。使用JDialog
的show
方法显示由该方法创建的对话框。有关使用此方法的示例,请参见如何使用表格部分中的指定其他编辑者。
卸下或装回预览面板
默认情况下,颜色 selectors 显示预览面板。 ColorChooserDemo2 使用以下代码行删除文本颜色 selectors 的预览面板:
tcc.setPreviewPanel(new JPanel());
由于普通的JPanel
没有大小且没有默认视图,因此可以有效地删除预览面板。要将预览面板设置回默认值,请使用null
作为setPreviewPanel
的参数。
要提供自定义预览面板,您还可以使用setPreviewPanel
。传递给方法的组件应继承JComponent
,指定合理的大小,并提供当前颜色的自定义视图。要在用户更改颜色 selectors 中的颜色时得到通知,预览面板必须注册为颜色 selectors 的颜色选择模型上的更改侦听器,如previously所述。
创建自定义 selectors 面板
默认颜色 selectors 提供五个 selectors 面板:
-
色板—用于从色板集合中选择颜色。
-
HSV —用于使用“色相饱和度值”颜色表示法选择颜色。在 JDK 7 之前,由于色相-饱和度-亮度,它被称为 HSB。
-
HSL —用于使用“色调饱和度-亮度”颜色表示法选择颜色。这是 JDK 7 中的新功能。
-
RGB —用于使用红-绿-蓝颜色模型选择颜色。
-
CMYK —用于使用原色或四色模型选择颜色。这是 JDK 7 中的新功能。
您可以通过使用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 面板。
CrayonPanel
是AbstractColorChooserPanel的子类,并覆盖其超类中定义的五个抽象方法:
-
void buildChooser()
- 创建包含 selectors 面板的 GUI。该示例创建了四个切换按钮(每个蜡笔一个),并将它们添加到 selectors 面板。
-
void updateChooser()
- 每当显示 selectors 面板时,都会调用此方法。此方法的实现选择表示当前选定颜色的切换按钮。
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()
- 返回 selectors 面板的显示名称。名称在 selectors 面板的选项卡上使用。这是示例
getDisplayName
方法:
- 返回 selectors 面板的显示名称。名称在 selectors 面板的选项卡上使用。这是示例
public String getDisplayName() {
return "Crayons";
}
-
Icon getSmallDisplayIcon()
- 返回一个小图标来表示此 selectors 面板。目前尚未使用。将来的颜色 selectors 版本可能会使用此图标或较大的图标来表示显示屏中的该 selectors 面板。此方法的示例实现返回
null
。
- 返回一个小图标来表示此 selectors 面板。目前尚未使用。将来的颜色 selectors 版本可能会使用此图标或较大的图标来表示显示屏中的该 selectors 面板。此方法的示例实现返回
-
Icon getLargeDisplayIcon()
- 返回一个大图标来表示此 selectors 面板。目前尚未使用。将来的颜色 selectors 版本可能会使用此图标或较小的图标来代表显示屏中的该 selectors 面板。此方法的示例实现返回
null
。
- 返回一个大图标来表示此 selectors 面板。目前尚未使用。将来的颜色 selectors 版本可能会使用此图标或较小的图标来代表显示屏中的该 selectors 面板。此方法的示例实现返回
颜色 selectorsAPI
下表列出了常用的JColorChooser
构造函数和方法。 JComponent 类的 API 表中列出了您可能调用的其他方法。使用颜色 selectors 的 API 分为以下几类:
方法或构造函数 | 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 按钮,第二个用于取消。 **按钮。 |
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)的默认拖放功能。 |