原文地址:DOC-03-03 按钮(Button) | JavaFX中文资料
JavaFX API中的Button类用来处理当用户点击一个按钮时执行一个动作(Action)。Button类继承自Labeled类,它可以显示文本,图像,或两者兼而有之。图显示了几个不同效果的按钮,学习如何创建这些类型的按钮
不同类型的按钮
创建一个按钮
在JavaFX应用程序中有三种构造方法来创建Button控件,见例
3 4 5 6 7 | //一个空Button Button button1 = new Button(); //一个指定了文本标题的Button Button button2 = new Button("Accept"); //一个指定了文本标题和图标的Button Image imageOk = new Image(getClass().getResourceAsStream("ok.png")); Button button3 = new Button("Accept", new ImageView(imageOk)); |
因为Button类继承自Labeled类,你可以使用以下方法来指定按钮的内容:
·setText(String text)method——指定文本
·setGraphic(Node graphic)method——指定图标
例展示了如何创建一个只有图标但没有文本的按钮。
1
2
3
|
Image imageDecline = new Image(getClass().getResourceAsStream("not.png"));
Button button5 = new Button();
button5.setGraphic(new ImageView(imageDecline));
|
运行这段代码,效果如图所示。
给按钮设置的图标是一个ImageView对象。然而你也可以使用其他图形对象。例如位于javafx.scene.shape 包中的各种形状。当为按钮同时设置了文本和图形内容时,可以使用setGraphicTextGap方法来设置它们之间的间距
按钮的默认皮肤区分了以下几种显示状态。图显示了一个带图标按钮的几种默认状态。
添加Action
当鼠标点击按钮时,首要的功能就是执行一个Action。使用setOnAction的方法来定义当用户点击按钮时将发生什么。展示了为button2定义一个Action。
为Button定义Action
1
2
3
|
button2.setOnAction((ActionEvent e) -> {
label.setText("Accepted");
});
|
例展示了如何处理一个ActionEvent,这样当用户点击button2时,一个Label的文本被设置为Accepted。
你可以为一个Button设置多个事件处理方法,来执行特定的行为代码或添加视觉特效代码。
应用视觉特效
因为Button类继承自Node类,所以你可以为Button添加javafx.scene.effect包下的任何特效来增强视觉效果。例中, 当onMouseEntered事件被触发时会向button3上添加阴影
(DropShadow)特效。
添加DropShadow特效
1
2
3
4
5
6
7
8
9
10
11
|
DropShadow shadow = new DropShadow();
//当鼠标进入按钮时添加阴影特效
button3.addEventHandler(MouseEvent.MOUSE_ENTERED, (MouseEvent e) -> {
button3.setEffect(shadow);
});
//当鼠标离开按钮时移除阴影效果
button3.addEventHandler(MouseEvent.MOUSE_EXITED, (MouseEvent e) -> {
button3.setEffect(null);
});
|
运行这段代码,效果如图所示。
为Button设置样式
接下来我们通过使用Skin类中定义的CSS样式来增强按钮的视觉外观。在JavaFX中使用CSS类似于在HTML中使用CSS,因为它们都基于相同的CSS规范。
你可以在一个单独的CSS样式文件中定义样式,然后通过getStyleClass方法在应用程序中使用它。该方法继承自Node类,并且在所有的UI控件中都可用。例图展示了如何使用CSS及其运行结果。
为Button设置样式
1
2
3
4
5
6
7
8
|
// CSS文件中的代码
.button1{
-fx-font: 22 arial;
-fx-base: #b6e7c9;
}
// ButtonSample.java中的代码
button1.getStyleClass().add("button1");
|
-fx-font属性设置了button1的字体名称和大小,-fx-base属性重设了按钮的默认颜色。运行这段代码,结果如图所示,button1的背景将变成浅绿色,并且字体会变得比默认字体更大。
使用CSS样式的Button