JavaFX UI控件教程(二十五)之Color Picker

翻译自  Color Picker

本章介绍ColorPicker控件,提供其设计概述,并说明如何在JavaFX应用程序中使用它。

JavaFX SDK中的颜色选择器控件是一个典型的用户界面组件,使用户可以从可用范围中选择特定颜色,或通过指定RGB或HSB组合来设置其他颜色。

设计概述

ColorPicker控制由颜色选择,调色板和自定义颜色对话框窗口。图24-1显示了这些元素。

图24-1颜色选择器控件的元素



颜色选择器

颜色选择器的颜色选择器元素是组合框,其中启用了颜色指示器,并且相应的标签显示在图24-1的顶部。颜色指示器显示当前选择的颜色。

颜色选择器控件的实现允许颜色选择器元素的三个外观:按钮,分割菜单按钮和组合框,如图24-2所示。

图24-2颜色选择器的视图

按钮外观提供带有颜色指示器和标签的典型按钮控件。在分割菜单按钮外观中,控件的按钮部分与下拉菜单分开。组合框外观是颜色选择器的默认外观。它还有一个下拉菜单,但它没有与按钮部分分开。

要应用其中一个外观,请使用相应的CSS类。有关如何更改颜色选择器外观的详细信息,请参阅更改颜色选择器的外观。

调色板

调色板包含预定义的颜色集和指向“自定义颜色”对话框窗口的“自定义颜色”链接。调色板的初始外观如图24-3所示。

图24-3调色板的初始外观

如果已定义自定义颜色,则此颜色将显示在调色板的“自定义颜色”区域中,如图24-4所示。

图24-4带自定义颜色区域的调色板

调色板支持使用向上,向下,向左和向右键进行导航。

除非在应用程序中保存,否则无法在应用程序再次启动时重新加载自定义颜色集。在调色板或自定义颜色区域中选择的每种颜色都显示在颜色选择器的颜色指示器中。颜色选择器标签呈现相应的十六进制Web颜色值。

自定义颜色对话窗口

“自定义颜色”对话框窗口是一个模态窗口,可以通过单击调色板中的相应链接来打开该窗口。打开“自定义颜色”窗口时,它将显示当前在颜色选择器的颜色指示器中显示的颜色值。用户可以通过将鼠标光标移动到颜色区域或垂直颜色条上来定义新颜色,如图24-5所示。请注意,只要用户使用颜色区域中的圆或颜色条中的矩形进行操作,颜色值就会自动分配给ColorPicker控件的相应属性。

图24-5“自定义颜色”对话框窗口

定义新颜色的另一种方法是设置HSB(色调饱和度亮度)或RGB(红绿蓝)值,或在相应字段中明确输入Web颜色值。图24-6显示了自定义颜色设置的三个窗格。

图24-6“自定义颜色”对话框窗口中的颜色设置窗格

用户还可以通过移动“不透明度”滑块或键入0到100之间的值来设置自定义颜色的透明度。

完成所有设置并指定新颜色后,用户可以单击“使用”进行应用,或单击“保存”将颜色保存到自定义颜色区域。

使用拾色器

使用ColorPickerJavaFX SDK 的类在JavaFX应用程序中构建颜色选择器。您可以将颜色选择器直接添加到应用程序场景,布局容器或应用程序工具栏。例24-1显示了三种声明ColorPicker对象的方法。

示例24-1创建颜色选择器控件

//Empty contructor, the control appears with the default color, which is WHITE
ColorPicker colorPicker1 = new ColorPicker();
//Color constant set as the currently selected color
ColorPicker colorPicker2 = new ColorPicker(Color.BLUE);
//Web color value set as the currently selected color
ColorPicker colorPicker3 = new ColorPicker(Color.web("#ffcce6"));

尝试示例24-2中显示的示例来评估ColorPicker控件的运行情况。

示例24-2使用ColorPicker控件更改文本组件的颜色

import javafx.application.Application;
import javafx.event.*;
import javafx.scene.Scene;
import javafx.scene.control.ColorPicker;
import javafx.geometry.Insets;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.text.*;
import javafx.stage.Stage;public class ColorPickerSample extends Application {    public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage stage) {stage.setTitle("ColorPicker");Scene scene = new Scene(new HBox(20), 400, 100);HBox box = (HBox) scene.getRoot();box.setPadding(new Insets(5, 5, 5, 5));          final ColorPicker colorPicker = new ColorPicker();colorPicker.setValue(Color.CORAL);final Text text = new Text("Try the color picker!");text.setFont(Font.font ("Verdana", 20));text.setFill(colorPicker.getValue());colorPicker.setOnAction(new EventHandler() {public void handle(Event t) {text.setFill(colorPicker.getValue());               }});box.getChildren().addAll(colorPicker, text);stage.setScene(scene);stage.show();}
}

此示例创建颜色选择器,并在颜色更改时定义其行为。Color通过类的getValue方法获得的值ColorPicker被传递给对象的setFill方法Text。这就是所选颜色应用于“尝试颜色选择器!”的方式。文本。

编译并运行此示例时,它会生成如图24-7所示的输出。该图捕获了新创建的自定义颜色应用于Text组件的时刻。

图24-7 ColorPicker和文本组件

同样,您可以将所选颜色应用于图形Node。例24-3显示了如何使用颜色选择器来模拟T恤。

示例24-3使用ColorPicker更改图形对象的颜色

import javafx.application.Application;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.ColorPicker;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ToolBar;
import javafx.scene.effect.DropShadow;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.SVGPath;
import javafx.stage.Stage;public class ColorPickerSample extends Application {ImageView logo = new ImageView(new Image(getClass().getResourceAsStream("OracleLogo.png")));public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage stage) {stage.setTitle("ColorPicker");Scene scene = new Scene(new VBox(20), 300, 300);scene.setFill(Color.web("#ccffcc"));VBox box = (VBox) scene.getRoot();ToolBar tb = new ToolBar();box.getChildren().add(tb);final ComboBox logoSamples = new ComboBox();logoSamples.getItems().addAll("Oracle","Java","JavaFX","Cup");logoSamples.setValue("Oracle");logoSamples.valueProperty().addListener(new ChangeListener<String>() {@Override public void changed(ObservableValue ov, String t, String t1) {                logo.setImage(new Image(getClass().getResourceAsStream(t1+"Logo.png")));                  }    });final ColorPicker colorPicker = new ColorPicker();tb.getItems().addAll(logoSamples, colorPicker);StackPane stack = new StackPane();box.getChildren().add(stack);final SVGPath svg = new SVGPath();svg.setContent("M70,50 L90,50 L120,90 L150,50 L170,50"+ "L210,90 L180,120 L170,110 L170,200 L70,200 L70,110 L60,120 L30,90"+ "L70,50");svg.setStroke(Color.DARKGREY);svg.setStrokeWidth(2);svg.setEffect(new DropShadow());svg.setFill(colorPicker.getValue());stack.getChildren().addAll(svg, logo);colorPicker.setOnAction(new EventHandler() {public void handle(Event t) {svg.setFill(colorPicker.getValue());                    }});stage.setScene(scene);stage.show();}
}

在该示例中,在颜色选择器中选择并通过该getValue方法获得的颜色被应用于SVGPath对象。此示例生成如图24-8所示的输出

图24-8 ColorPickerSample应用程序

使用颜色选择器时,可以通过调用getCustomColors()方法获取创建的自定义颜色。它返回一个ObservableList所述的Color对应于所创建的颜色的对象。您无法在应用程序启动时将它们上载到颜色选择器。但是,您可以将其中一种自定义颜色设置为ColorPicker值(如例24-4所示)。

示例24-4获取自定义颜色

ObservableList<Color> customColors = colorPicker.getCustomColors();
colorPicker.setValue(customColors.get(index));

更改拾色器的外观

颜色选择器控件的默认外观由com.sun.javafx.scene.control.skin.ColorPickerSkin类定义。要将替代外观应用于JavaFX应用程序中的颜色选择器,请重新定义CSS类的-fx-skin属性,color-picker如例24-5所示。

示例24-5为拾色器设置备用外观

.color-picker {-fx-skin: "CustomSkin";
}

使用split-buttonarrow-buttonCSS类更改JavaFX代码中颜色选择器控件的外观,如例24-6所示。

示例24-6设置拾色器的外观

//Sets the split-menu-button
colorPicker.getStyleClass().add("split-button");
//Sets the button
colorPicker.getStyleClass().add("button");

您还可以修改颜色选择器的默认样式,并使用caspian样式表中定义的各种CSS类自定义其元素。要查看此文件,请转到\rt\lib安装JavaFX SDK 的目录下的目录。使用以下命令从JAR文件中提取样式表:jar -xf jfxrt.jar com/sun/javafx/scene/control/skin/caspian/caspian.css。有关CSS类和属性的更多信息,请参阅使用CSS对JavaFX应用程序进行外观处理。例24-7显示了如何更改颜色选择器的默认背景和标签。

示例24-7修改颜色选择器的默认外观

.color-picker {-fx-background-color: #669999; -fx-background-radius: 0 15 15 0; 
}
.color-picker .color-picker-label .text {-fx-fill: #ccffcc;
}

将这些样式添加到ControlStyle.css文件中,并使用以下代码行在JavaFX应用程序中启用样式表:scene.getStylesheets().add("colorpickersample/ControlStyle.css");,然后编译并运行ColorPickerSample。颜色选择器应改变其外观,如图24-9所示。

图24-9颜色选择器的修改外观

请注意,ColorPicker该类是类的扩展,ComboBoxBase并继承其CSS属性。您可以为combo-box-baseCSS样式定义新样式,以统一ColorPickerSample应用程序中的组合框和颜色选择器。使用示例24-8中显示的样式替换ControlStyle.css文件中的样式。

示例24-8设置组合框基础样式

.tool-bar:horizontal {-fx-background-color: #b3e6b3;
}.combo-box-base  {-fx-background-color: null;  
}.combo-box-base:hover  {-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 8, 0.0 , 0 , 0 );
}

使用应用的样式编译和运行ColorPickerSample应用程序时,组合框和颜色选择器的外观如图24-10所示。

图24-10组合框和拾色器的统一样式

 

相关的API文档 

  • ColorPicker

  • ComboBoxBase

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssl1217-删边【图论,dfs】

题目 给出一个连通无向图&#xff0c;求最多能删掉多少条边后还是连通图。 输入 4(顶点数) 6(边数) 1 2 (表示一条点1到点2的线) 1 3 1 4 2 3 2 4 3 4 输出 3 dfs解题思路 这道题其实不用dfs更简单&#xff0c;但是毕竟例题还是用一下吧。 首先我们如果到达一个点便…

英语不会读怎么办?它来教你……

大家好&#xff0c;我是雄雄&#xff0c;今天我又给大家分享好看又实用的软件啦~今天给大家分享的是一个比昨天的随机点名系统还要实用的软件&#xff0c;如果说昨天的随机点名系统只适合老师或者某些需要点名的朋友使用的话&#xff0c;那么今天分享的软件则是一个人人都可使用…

数据维护

&#xff08;1&#xff09;在学生表Student中插入一条记录&#xff08;‘001201’&#xff0c;‘王一山’&#xff0c;‘男’&#xff0c;1980-12-4&#xff09;。 insert into student values(001201,王一山,男,1980-12-4) &#xff08;2&#xff09;插入一条选课记录&#xf…

深入探索.NET框架内部了解CLR如何创建运行时对象

前言 SystemDomain, SharedDomain, and DefaultDomain。对象布局和内存细节。方法表布局。方法分派&#xff08;Method dispatching&#xff09;。 因为公共语言运行时(CLR)即将成为在Windows上创建应用程序的主角级基础架构, 多掌握点关于CLR的深度认识会帮助你构建高效的, …

方法的重载

package com.wdl.day09;/** 方法的重载&#xff08;overload&#xff09; loading...** 1.定义&#xff1a;在同一个类中&#xff0c;允许存在一个以上的同名方法&#xff0c;只要它们的参数个数或者参数类型不同即可。** "两同一不同":同一个类、相同方法名* …

JavaFX UI控件教程(二十六)之Pagination Control

翻译自 Pagination Control 本章介绍如何向JavaFX应用程序添加分页控件。它教授如何向应用程序添加分页控件&#xff0c;管理其页面项&#xff0c;以及使用CSS样式设置控件元素的样式。 分页控件&#xff0c;用于浏览分成较小部分的多页内容。典型用途包括浏览邮箱中的电子邮…

长风破浪会有时,直挂云帆济沧海……

自从长假开学以来&#xff0c;班内学生的状态一直不如我所愿。前几天刚入学&#xff0c;因为马上就就业了&#xff0c;所以对他们的安排还是以做项目为主&#xff0c;早在假期的时候就已经将学生分为人数不等的8个小组&#xff0c;其中开发两个小组&#xff0c;前端5个小组以及…

ssl1759-求连通分量【图论,深搜,广搜】

题目 水题系列。给出一个图&#xff0c;求他的连通分量。 科普&#xff1a;连通分量就是一个图中可以连接最多点的子图&#xff08;可以是它本身&#xff09;的点数量。 输入 5(点的数量) 1 2(表示1和2连通) 3 4 2 3 0 0(表示停止输入) 输出 4 解题思路 Er…这道题没…

可变个数的形参

package com.wdl.day09;/** 可变个数形参的方法** 1.jdk 5.0新增的内容* 2.具体使用&#xff1a;* 2.1 可变个数形参的格式&#xff1a;数据类型 ... 变量名* 2.2 当调用可变个数形参的方法时&#xff0c;传入的参数个数可以是&#xff1a;0个&#xff0c;1个,2个&#xff…

JavaScript表单

JavaScript中表单知识总结 1 readonly和disabled 共同点&#xff1a;都是导致内容不可以更改 区别&#xff1a; readonly&#xff1a;中的内容是可以提交的 disabled&#xff1a;数据是不可以提交的,不可以在被操作 2表单提交的方式 οnsubmit“return sub()” <input t…

.NET 传奇 1.0 的出版过程,以及未来计划

今年五月初开始在微博的头条文章连载《.NET 的一点历史故事》&#xff0c;是一件非常快乐的事情。在各方朋友们的鼓励和支持之下&#xff0c;除去公开连载的八个章节&#xff0c;其后又先后完成其他十个章节&#xff0c;首先通过收费阅读渠道做了分享。到五月底的时候&#xff…

JavaFX UI控件教程(二十七)之File Chooser

翻译自 File Chooser 本章介绍如何使用FileChooser该类使用户能够导航文件系统。本章提供的示例说明了如何打开一个或多个文件&#xff0c;配置文件选择器对话框窗口以及保存应用程序内容。 与其他用户界面组件类不同&#xff0c;FileChooser该类不属于该javafx.scene.contr…

sql server高级查询,看这篇文章就够了

先选择一个数据库 use jobtest go引入&#xff1a;该数据库jobtest里面有两张表&#xff0c;Student学生表和Grade年级表&#xff0c;表中的数据如下所示&#xff1a; 学生表Student&#xff1a; 年级Grade表&#xff1a; 接下来我们来看看sql server中的子查询&#xff1a…

ssl1104-USACO 2.1城堡(foodfill)【图论,广搜】

##前言 由于这道题比较难&#xff0c;有不好描述&#xff0c;我就直接贴题目了。 ##Description 以一个几乎超乎想像的运气&#xff0c;农民约翰在他的生日收到了一张爱尔兰博彩的奖券。 这一张奖券成为了唯一中奖的奖券。 农民约翰嬴得爱尔兰的乡下地方的一个传说中的城堡。 …

直接输出数组的名字不一定是地址值

package com.wdl.day09;/*** 创建人 wdl* 创建时间 2021/8/12* 描述*/ public class ArrayPrintTest {public static void main(String[] args) {int[] arr new int[]{1, 2, 3};System.out.println(arr);//地址值char[] arr1 {a, b,c};System.out.println(arr1);//abc} }

jQuery的简介

jQuery的简介 [1]为什么学习jQuery A、JS书写代码的时候结构比较的臃肿 B、JS获得元素对象的方式比较的单一 C、JS书写的代码浏览器的兼容性比较差 D、JS实现动画的效果比较的麻烦 [2]什么是jQuery javascriptQuery(js库) 目前最流行的JavaScript函数库&#xff0c;对JavaScrip…

JavaFX UI控件教程(二十八)之UI控件的自定义

翻译自 Customization of UI Controls 本章介绍了UI控件自定义的各个方面&#xff0c;并总结了Oracle提供的一些提示和技巧&#xff0c;以帮助您修改UI控件的外观和行为。 您可以通过应用层叠样式表&#xff08;CSS&#xff09;&#xff0c;重新定义默认行为和使用单元工厂来…

好多人都说存储过程很难?认真看这篇文章就够了

何为存储过程&#xff1f;存储过程是在数据库管理系统中保存的、预先编译的并能实现某种功能的sql程序&#xff0c;说直白点&#xff0c;java知道吧&#xff1f;和java的方法一样。每遇到一个新的知识点时&#xff0c;我们都会看看它的优点&#xff0c;从而加深对它学习的欲望&…

下一代的 Actor 模型框架 Proto Actor

ProtoAct 是下一代的 Actor 模型框架&#xff0c;提供了 .NET 和 Go 语言的实现&#xff0c;默认支持分布式&#xff0c;提供管理和监控功能。在过去几年&#xff0c;我们经常看到两种 Actor 模型方法相互竞争&#xff0c;首先是经典的 Erlang/Akka 风格的 Actor 模型&#xff…

ssl1776-游乐场【图论,深搜】

题目 一个游乐场&#xff08;无向图&#xff09;&#xff0c;每个景点&#xff08;点&#xff09;都有一定的开心值&#xff08;价值&#xff09;&#xff0c;一个点只能游玩一次。然后可以从任何一个点出发&#xff0c;求可以游玩的最多项目&#xff08;连通分量&#xff09;…