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

时间:2021-01-24 17:04:34

原文地址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

(翻译)第十一回 JavaFX2.0开关按钮ToggleButton
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

(翻译)第十一回 JavaFX2.0开关按钮ToggleButton
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

(翻译)第十一回 JavaFX2.0开关按钮ToggleButton
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

(翻译)第十一回 JavaFX2.0开关按钮ToggleButton
Description of "Figure 5-4 Painted Toggle Buttons"

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