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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

.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} }

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…

你知道i=i++;的含义吗?原理其实没有你想的那么简单

i和i我们都知道&#xff0c;但是你知道ii;吗&#xff1f;自上学时&#xff0c;老师就说i是先赋值再加&#xff0c;而i是先加再赋值&#xff0c;比如我们写个代码举下例子&#xff1a;i:/*** 自增案例*/public static void testZiZeng(){int i 1;int a i;System.out.println(&…

学会思考,而不只是编程

中国人常说“授之以鱼不如授之以渔”。如果说教授编程是授之以鱼&#xff0c;那么教授计算机科学就是授之以渔。为什么说学习计算机科学比学会编程要重要得多&#xff1f;来听听Yevgeniy Brikman的解释。 现如今&#xff0c;似乎每个人都在学习编程&#xff1a;Bill Gates、Ma…

ssl1562-局域网

局域网 题目 就是一个图&#xff0c;求最小生成树&#xff0c;然后求被去除的边的价值。 输入 用线来表示联通 5 5 1 2 8 1 3 1 1 5 3 2 4 5 3 4 2 输出 去除的边的总价值 8 解题思路 求出最小生成树的价值然后线的总值减去最小生成树的价值 代码 #include<…

什么?java中居然可以执行js代码了?真是不知者不怪

今天在书上看的&#xff0c;java中可以直接调用js的函数了&#xff0c;言外之意就是java已经支持外部的脚本语言了&#xff08;在运行期解释执行的&#xff09;&#xff0c;查了查&#xff0c;jdk从1.6之后开始支持的&#xff0c;1.6之前不可以。 为什么Java这种编译语言还需要…

用 Docker Machine 创建 Azure 虚拟主机

搭建环境向来是一个重复造轮子的过程&#xff0c;Docker Machine 则把用户搭建 Docker 环境的各种方案汇集在了一起。笔者在《Docker Machine 简介》一文中演示了使用 Docker Machine 在本地的 vSphere 主机中安装 Docker 环境。但是在云计算大爆炸的今天&#xff0c;真正让我们…

振华重工携手微软,开启港口运营数字化转型新纪元

上海振华重工&#xff08;集团&#xff09;股份有限公司&#xff08;ZPMC&#xff09;是重型装备制造行业的知名企业&#xff0c;是港口机械的领军者。企业的港口机械目前已销往93个国家和地区&#xff0c;全球占有率高达82%&#xff0c;多年保持行业领先的地位。 转型大计提上…

在JavaFX程序中嵌入Swing内容

转载自 在JavaFX程序中嵌入Swing内容 本教程描述如何在JavaFX应用程序中嵌入Swing组件。本文将讨论线程限制并提供一个可运行的应用程序来说明在JavaFX应用程序中嵌入带HTML内容的Swing按钮&#xff0c;以及Swing与JavaFX按钮间的协作性。 从JavaFX 2.0版本开始&#xff0c;…

你胆敢不加break试试?

我们经常在实际开发中会用到一些转换类&#xff0c;比如在金融界中&#xff0c;我们需要将1转换为“壹”&#xff0c;2转换成“贰”。还有类似这样的需求&#xff0c;食堂在一周内每天的菜单都是不一样的&#xff0c;周一为鱼香肉丝鸡腿&#xff0c;周二为爆炒土豆丝鲅鱼&#…