(翻译)第十一回 JavaFX2.0开关按钮ToggleButton

简介: 原文地址http://download.oracle.com/javafx/2.0/ui_controls/toggle-button.htm      ToggleButton类代表了可以通过JavaFX API创建的另一类按钮。

原文地址http://download.oracle.com/javafx/2.0/ui_controls/toggle-button.htm

 

 

 ToggleButton类代表了可以通过JavaFX API创建的另一类按钮。 2个或更多的这种按钮被加入一个组中,但是每次只能有一个被选中,或者一个都没有。 Figure 5-1是在一个组中有3个开关按钮的应用截图。这个应用根据哪个开关按钮别按下来决定绘制何种颜色的矩形。

Figure 5-1 Three Toggle Buttons

Three toggle buttons and a rectangle
Description of "Figure 5-1 Three Toggle Buttons"

创建Toggle Button

可以通过ToggleButton类的3个构造方法的任意一个来创建开关按钮。Example 5-1.

Example 5-1 Creating Toggle Buttons

//A toggle button without any caption or icon
ToggleButton tb1 = new ToggleButton();
//A toggle button with a text caption
ToggleButton tb2 = new ToggleButton("Press me");
//A toggle button with a text caption and an icon
Image image = new Image(getClass().getResourceAsStream("icon.png"));
ToggleButton tb3 = new ToggleButton ("Press me", new ImageView(image));

ToggleButton类继承了Labeled类,因而你可以为其指定文本标题、图像、文本加图像。可以使用Labeled  类的setTextsetGraphic方法来给开关按钮指定文本和图像。

 

在代码中定义了开关按钮后,就可以把它们放进组中并指定特定的行为。

把Toggle Button加入组

 ToggleButton类的实现和RadioButton类实现相当类似。不过和单选框不同的是,开关按钮并不要求每次必须最少有一个按钮被选中在组中。也就是说,点击选中的开关按钮会使其取消选中,但是点击组中的单选按钮没任何反应。

t花点时间看下 Example 5-2中的代码吧.

Example 5-2 Combining Toggle Buttons in a Group

final ToggleGroup group = new ToggleGroup();

ToggleButton tb1 = new ToggleButton("Minor");
tb1.setToggleGroup(group);
tb1.setSelected(true);

ToggleButton tb2 = new ToggleButton("Major");
tb2.setToggleGroup(group);

ToggleButton tb3 = new ToggleButton("Critical");
tb3.setToggleGroup(group);

Example 5-2创建了3个开关按钮并把它们加入开关组中。tb1调用了setSelected方法,所以应用打开后它会被按下。但是,你也可以按起Minor按钮使得没有任何开关按钮被按下。见 Figure 5-2.

Figure 5-2 Three Toggle Buttons in a Group

Three toggle buttons in a group
Description of "Figure 5-2 Three Toggle Buttons in a Group"

一般使用开关按钮的组来为每个按钮分配特定行为。下一部分将解释如何使用这些开关按钮改变矩形的颜色。

设置行为

ToggleButton类从Node 类继承了setUserData方法,该方法可以让你给任意选中的选项赋特定的值。在 Example 5-3中,用户数据指明了要用什么颜色来绘制矩形。

 

Example 5-3 Setting User Data for the Toggle Buttons

tb1.setUserData(Color.LIGHTGREEN);
tb2.setUserData(Color.LIGHTBLUE);
tb3.setUserData(Color.SALMON);

final Rectangle rect = new Rectangle(145, 50);

final ToggleGroup group = new ToggleGroup();
group.selectedToggleProperty().addListener(new ChangeListener<Toggle>(){
    public void changed(ObservableValue<? extends Toggle> ov,
        Toggle toggle, Toggle new_toggle) {
            if (new_toggle == null)
                rect.setFill(Color.WHITE);
            else
                rect.setFill(
                    (Color) group.getSelectedToggle().getUserData()
                );
         }
});

ChangeListener<Toggle>对象检查了组中被按下的开关。如果没有开关按钮被按下,矩形就用白色绘制。如果某个按钮被按下,getSelectedTogglegetUserData方法会连续调用来返回一种颜色绘制矩形。

比如用户按下了tb2按钮, setSelectedToggle().getUserData()的调用返回 Color.LIGHTBLUE结果如图 Figure 5-3.

Figure 5-3 Using Toggle Buttons to Paint a Rectangle

The Major toggle button is selected
Description of "Figure 5-3 Using Toggle Buttons to Paint a Rectangle"

查看 ToggleButtonSample.java文件检查应用的完整代码。

美化Toggle Button

可以通过为开关按钮应用CSS来改善应用的视效。在JavaFX 2.0应用中使用CSS和在HTML中使用几乎一样,因为它们都基于相同的CSS规范。Example 5-4使用setStyle方法改变了开关按钮的 -fx-base CSS熟悉。

Example 5-4 Applying CSS Styles to Toggle Buttons

tb1.setStyle("-fx-base: lightgreen;");
tb2.setStyle("-fx-base: lightblue;");
tb3.setStyle("-fx-base: salmon;");

程序中加入这些代码后开关按钮的变化见 Figure 5-4.

Figure 5-4 Painted Toggle Buttons

Toggle buttons styles with CSS
Description of "Figure 5-4 Painted Toggle Buttons"

 你可以尝试ToggleButton类的其他CSS属性,或者应用动画、转换、 JavaFX API中的各种视效。

 

 
目录
相关文章
|
Linux 开发工具 内存技术
国产之路:复旦微zynq调试笔记2--PL网口
PL侧的网口需求相较于PS部分还是有一定区别的,主要需要添加axi ethernet 的移植
3531 0
|
6月前
BigDecimal保留两位小数
本文介绍了BigDecimal保留两位小数的三种方法:`setScale`、`DecimalFormat`和`String.format`。其中,`setScale`可设置保留规则并返回BigDecimal类型值;`DecimalFormat`通过匹配规则返回字符串类型值;`String.format`为字符串自带方法,同样返回字符串类型值。此外,文章还对比了四种保留小数规则(如`00.00`、`#0.00`等),总结出`#0.00`是最适用的规则。附有详细代码示例与控制台打印结果,便于理解与实践。
1028 19
|
网络安全 开发工具 数据安全/隐私保护
Win10使用Git克隆项目出现fatal: Authentication failed for异常
Windows 10系统中使用Git克隆项目时出现"fatal: Authentication failed for"异常的解决方法,主要是通过修改凭据管理器中的Git凭据密码来解决因密码过期导致的身份验证失败问题。
811 0
Win10使用Git克隆项目出现fatal: Authentication failed for异常
|
安全 Java 数据库
ifPresent()`方法的用途、使用场景
ifPresent()`方法的用途、使用场景
973 4
|
11月前
|
SQL 存储 数据管理
一篇文章带你掌握SQLite3基本用法
通过本文的介绍,希望您能深入理解SQLite3的基本用法,并在实际开发中灵活运用这些知识,提升数据管理效率。
1503 5
|
存储 Java Apache
Java“NoClassDefFoundError”解决
“Java NoClassDefFoundError”是运行时错误,表示JVM找不到某个类的定义。通常由类路径设置不当、依赖缺失或版本冲突引起。解决方法包括检查类路径、确保所有依赖正确添加及版本兼容。
1876 3
|
Web App开发 移动开发 小程序
看我如何让手机秒变扫码枪
为解决无扫码枪问题,作者受到微信小程序“超级扫码枪”启发,决定自制手机扫码到电脑的应用。项目需求是手机扫描条形码或二维码后实时传送到电脑。实现步骤包括:电脑端用Java Swing和Robot模拟键盘输入,手机端H5调用摄像头扫码(借助html5-qrcode库),并通过WebSocket服务将结果发送至电脑。项目源码及演示视频链接提供。
2770 5
|
IDE Java 程序员
Eclipse 安装插件报错:An error occurred while collecting items to be installed session context was...解决方法汇总
Eclipse 安装插件报错:An error occurred while collecting items to be installed session context was...解决方法汇总
1588 0
Eclipse 安装插件报错:An error occurred while collecting items to be installed session context was...解决方法汇总
|
算法 数据挖掘 双11
心相印携肖战开启双11户外营销,瓴羊数智助力高曝光多频次覆盖精准客群
心相印携肖战开启双11户外营销,瓴羊数智助力高曝光多频次覆盖精准客群
280 0
|
SQL 开发框架 数据库连接
uniapp中sqlite数据库常用操作的简单封装
uniapp中sqlite数据库常用操作的简单封装
1486 0