[译]JavaFX 2.0+ - UI控件 - 按钮

3 按钮

JavaFX API中的Button类用来处理当用户点击一个按钮时执行一个操作。Button类继承自Labeled类, 它可以显示文本,图像,或两者兼之。图3 - 1显示了几个不同效果的按钮, 在本章中你将学习如何创建这些类型的按钮。

图3 - 1 不同类型的按钮


上图中显示了五个按钮和一个标签,这些按钮分多行显示。 第一行中的按钮包含一个图标和文本,图标是一个绿色的实心圆中间放置一个白色的对钩。 第二行显示了两个纯文本按钮和一个标签。其中“Decline”按钮展示的是鼠标放在按钮上时的显示——边框有阴影效果。第三行包含两个纯图标按钮,没有任何文本。

创建按钮

Button类有3个构造函数,见代码片段例3 - 1

例3 - 1 创建一个按钮

//空按钮
Button button1 = new Button();
//指定文本的按钮
Button button2 = new Button("Accept");
//指定文本和图标的按钮
Image imageOk = new Image(getClass().getResourceAsStream("ok.png"));
Button button3 = new Button("Accept", new ImageView(imageOk));

因为Button类继承自Labeled类,你可以使用以下方法来指定按钮的内容:

  • setText(String text)——指定文本
  • setGraphic(Node graphic)——指定图形图标

例3 - 2展示了如何创建一个只有图标但没有文本的按钮。

例3 - 2 添加一个图标按钮

Image imageDecline = new Image(getClass().getResourceAsStream("not.png"));
Button button5 = new Button();
button5.setGraphic(new ImageView(imageDecline));

运行这段代码,效果如图3 - 2所示。

图3 - 2 按钮和图标

例3 - 2和 图3 - 2中,给按钮设置的图标是一个ImageView对象。 不过,你也可以使用其他图形对象。例如,位于javafx.scene.shape 包中的Shape对象。 当为按钮同时设置了文本和图形内容时,可以使用setGraphicTextGap()方法来设置它们之间的间距。

按钮的默认皮肤区分了以下几种显示状态。 图3 - 3显示了一个带图标按钮的几种默认状态。

图3 - 3 按钮的几种状态

添加按钮事件

当鼠标点击按钮时,首要的功能就是响应一个事件。使用setOnAction的方法可以为按钮定义一个事件,当用户点击按钮时触发。代码片段例3 - 3展示了为button2添加一个事件。

例3 - 3 为按钮定义事件

button2.setOnAction((ActionEvent e) -> {
    label.setText("Accepted");
});

例3 - 3展示了如何处理一个事件(ActionEvent),这样当用户点击button2时,一个标签的文本被设置为“Accept”。

你可以为一个按钮设置尽可能多的事件处理方法,来执行特定的行为或添加视觉特效。

视觉特效

因为Button类继承自Node类,所以你可以为按钮添加javafx.scene.effect包下的任何特效来增强视觉效果。在代码片段例3 - 4, 当鼠标进入button3时(onMouseEntered),为其增加了阴影效果(DropShadow)

例3 - 4 DropShadow效果

DropShadow shadow = new DropShadow();
//当鼠标进入按钮时添加阴影效果
button3.addEventHandler(MouseEvent.MOUSE_ENTERED, (MouseEvent e) -> {
    button3.setEffect(shadow);
});

//当鼠标离开按钮时移除阴影效果
button3.addEventHandler(MouseEvent.MOUSE_EXITED, (MouseEvent e) -> {
    button3.setEffect(null);
});

运行这段代码,效果如图3 - 4所示。

图3 - 4 按钮和阴影

按钮样式

接下来我们通过使用Skin类中定义的CSS样式来增强按钮的视觉外观。在JavaFX中使用CSS类似于在HTML中使用CSS,因为每个案例是基于相同的CSS规范。

你可以在一个单独的CSS样式文件中定义CSS,然后通过getStyleClass方法将其应用起来。该方法继承自Node类,所以对所有UI控件都可用。例3 - 5和 图3 - 4展示了如何使用CSS及其运行结果。

例3 - 5样式按钮

//CSS代码
.button1{
    -fx-font: 22 arial;
    -fx-base: #b6e7c9;
}
//JavaFX代码
button1.getStyleClass().add("button1");

-fx-font属性设置了button1的字体名称和大小, -fx-base属性重设了按钮的默认颜色。

运行这段代码,结果如图3 - 5所示,button1的背景是浅绿色,有一个比默认字体更大的字体。

图3 - 5 用CSS样式化的按钮

相关的API文档

[译]JavaFX 2.0+ - UI控件 - 按钮

时间: 2024-11-07 17:04:24

[译]JavaFX 2.0+ - UI控件 - 按钮的相关文章

[译]JavaFX 2.0+ - UI控件 - 标签

2 标签(Label) 本章主要介绍如何使用标签(Label),该类位于JavaFX API的javafx.scene.control包中,用于显示一个文本元素. 接下来会介绍如何让文本元素自动换行来适应受限空间,添加一个图标,或使用视觉特效. 图2 - 1显示了标签的三种常见用法. 左边的标签是一个带图标的文本,中间的展示了旋转效果,右边的使用了自动换行设置. 图2 - 1 标签示例 这幅图显示了三个标签,他们被放在了同一行. 左边的标签有一个看起来像个放大镜的图标和一个“Search”文本.

[译]JavaFX 2.0+ - 使用JavaFX UI控件

使用JavaFX UI控件 本教程涵盖了JavaFX API中内置的UI控件. 文档包含以下章节: 标签 按钮 单选按钮 开关按钮 复选框 选择框 文本字段 密码字段 滚动条 滚动面板 列表 表格 树 树形表格 下拉列表框 分隔符 滑块 进度条,进度指示器 超链接 提示 HTML编辑器 标题面板和手风琴 菜单 颜色选择器 日期选择器 分页控制 文件选择器 如何定制控件 嵌入式平台的支持 每一章提供了代码示例和应用程序来展示控件是如何显示和工作的. 你可以从目录中找到应用程序的源文件和相应的Net

JavaFX - UI控件 - 标签

  2标签(Label) 本章主要介绍如何使用标签(Label),该类位于JavaFX API的javafx.scene.control包中,用于显示一个文本元素. 接下来会介绍如何让文本元素自动换行来适应受限空间,添加一个图标,或使用视觉特效. 图2 - 1显示了标签的三种常见用法. 左边的标签是一个带图标的文本,中间的展示了旋转效果,右边的使用了自动换行设置. 图2 - 1 标签示例 这幅图显示了三个标签,他们被放在了同一行. 左边的标签有一个看起来像个放大镜的图标和一个"Searc

andorid 控件 Bootstrap3.0风格的控件 精美UI控件库

Bootstrap是Twitter推出的一个开源的用于前端开发的工具包.它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架.Bootstrap提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成.Bootstrap一经推出后颇受欢迎,一直是GitHub上的热门开源项目,包括NASA的MSNBC(微软全国广播公司)的Breaking News都使用了该项目.在逛github的时候,发现有位牛人做成 android版的 bo

Cocos2d-x3.0游戏实例之《别救我》第六篇——从代码中获取UI控件

这篇的内容很简单,获取UI控件,然后使用它. 还记得我们在UI编辑器中给三个按钮分别命名了吧? 现在要用上了. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址: http://www.benmutou.com/blog/archives/918 文章来源:笨木头与游戏开发 根据名字查找控件 首先给TollgateScene再include一些头文件,不然等会编译又报错了: #include "editor-support/cocostudio/CCSGUIReader.h&quo

cocos2d-js 3.0 rc2 自定义UI控件组件 例子:能播放动画的MenuItem。MenuItemSprite的bug

其实总体自定义UI组件都比较简单,尤其是cocos2d-js是开源的,如果有什么不明白的直接看js代码或者C++代码即可.当然js代码基本就够了. 另外,js的ctor函数虽然说是构造函数,但毕竟不是flash或者c++的构造函数,这只是一个普通函数,也就是说可以不在第一行默认调用,这就给扩展带来了不少方便. 现在想做一个声音按钮,点一下能关闭音乐,再点一下又能打开.当然就是MenuItemToggle了. 但想做得再炫一点,有声音的时候,按钮的样子能有几个音波的变化.那么就需要用MenuIte

Cocos2d-x3.0 从代码中获取cocostudio编辑的UI控件

依据名字查找控件 须要包括的头文件及名字空间: #include "cocostudio/CocoStudio.h" #include "ui/CocosGUI.h" using namespace cocos2d::ui; using namespace cocostudio; 注:project中须要附加包括的头文件文件夹:$(EngineRoot)cocos\editor-support.由于cocostudio在此文件夹下. 获取UI控件的方法例如以下: m

swift常用UI控件的使用方法

对于习惯了OC代码的程序员来说,swift的语法简直让人不能忍受,今天将一些常用的UI控件简单做了一下整理. import UIKit class ViewController : UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.whiteCol

[译]JavaFX 2.0+系列教程-使用内置的布局面板(2)-边框面板(BorderPane)

[译]JavaFX 2.0+系列教程-使用内置的布局面板(2)-边框面板(BorderPane) 边框面板 BorderPane 将面板划分为5个区域来放置界面元素:上.下.左.右.中. 图 1-1 显示了边框面板的布局示意图.每个区域的大小是没有限制的.在你使用边框面板时,如果不需要某个区域,你只要不为该区域设置内容,该区域则不会被分配显示空间,自然也就不会显示. 图 1-1 边框面板布局示意图 边框面板是我们经常见到的一个非常经典的布局效果:上面是菜单栏和工具栏,下面是状态栏,左边是导航面板