Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改以了解Java SE 9及其后续版本中更新的语言功能的摘要。
请参阅JDK发行说明以获取有关所有JDK版本的新功能、增强功能和已删除或不推荐使用的选项的信息。
使用JColorChooser
类允许用户从调色板中选择颜色。颜色选择器是您可以在程序GUI中的任何位置放置的组件。 JColorChooser
API还可以轻松地弹出包含颜色选择器的对话框(模态或非模态)。
这是一个应用程序的图片,它使用颜色选择器来设置横幅中的文本颜色:
程序的源代码位于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,这是前一个演示程序的修改版本,它使用了更多的JColorChooser
API。
这是ColorChooserDemo2的图片:
该程序对横幅文本颜色选择器进行以下定制:
移除或替换预览面板介绍了第一个定制。 创建自定义选择器面板讨论了后两个。
该程序还添加了一个按钮,点击按钮会弹出一个颜色选择器对话框,您可以使用该对话框来设置横幅的背景颜色。
JColorChooser
类提供了两个类方法,使得在对话框中使用颜色选择器变得很容易。ColorChooserDemo2使用其中一个方法showDialog
,当用户点击显示颜色选择器...按钮时,会显示背景颜色选择器。以下是示例中的单行代码,用于在对话框中显示背景颜色选择器:
Color newColor = JColorChooser.showDialog( ColorChooserDemo2.this, "选择背景颜色", banner.getBackground());
第一个参数是对话框的父级,第二个参数是对话框的标题,第三个参数是初始选定的颜色。
对话框在以下三种情况下消失:用户选择颜色并点击确定按钮,用户使用取消按钮取消操作,或用户使用框架控件关闭对话框。如果用户选择了颜色,showDialog
方法会返回新的颜色。如果用户取消操作或关闭窗口,该方法会返回null
。以下是示例中根据showDialog
返回的值更新横幅背景颜色的代码:
if (newColor != null) { banner.setBackground(newColor); }
showDialog
创建的对话框是模态的。如果您想要一个非模态对话框,可以使用JColorChooser
的createDialog
方法创建对话框。该方法还可以让您为对话框窗口的确定和取消按钮指定动作监听器。使用JDialog
的show
方法来显示该方法创建的对话框。有关使用此方法的示例,请参见指定其他编辑器中的如何使用表格部分。
默认情况下,颜色选择器显示预览面板。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
将数组的内容设置为颜色选择器的选择器面板。
CrayonPanel
是AbstractColorChooserPanel
的子类,并重写了其超类中定义的五个抽象方法:
void buildChooser()
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
。
以下表列出了常用的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 用于确定按钮,第二个用于取消按钮。 |
方法 | 目的 |
---|---|
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颜色,如下所示: |
void setSelectionModel(ColorSelectionModel) ColorSelectionModel getSelectionModel() |
设置或获取颜色选择器的选择模型。该对象包含当前选择并在选择更改时向注册的监听器触发更改事件。 |
此表显示使用JColorChooser的示例以及这些示例的描述位置。
示例 | 描述位置 | 备注 |
---|---|---|
ColorChooserDemo | 本节 | 使用标准颜色选择器。 |
ColorChooserDemo2 | 本节 | 在使用showDialog 创建的对话框中使用一个自定义颜色选择器和一个标准颜色选择器。 |
TableDialogEditDemo | 如何使用表格 | 演示如何在表格中使用颜色选择器作为自定义单元格编辑器。此示例使用createDialog 创建的颜色选择器。 |
BasicDnD | DnD简介 | 使用不在对话框中的颜色选择器;演示Swing组件的默认拖放功能,包括颜色选择器。 |