原文地址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
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
类的setText
和setGraphic方法来给开关按钮指定文本和图像。
在代码中定义了开关按钮后,就可以把它们放进组中并指定特定的行为。
把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
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>对象检查了组中被按下的开关。如果没有开关按钮被按下,矩形就用白色绘制。如果某个按钮被按下,
getSelectedToggle
和getUserData方法会连续调用来返回一种颜色绘制矩形。
比如用户按下了tb2按钮, setSelectedToggle().getUserData()的调用返回
Color.LIGHTBLUE
结果如图 Figure 5-3.
Figure 5-3 Using Toggle Buttons to Paint a Rectangle
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
Description of "Figure 5-4 Painted Toggle Buttons"
你可以尝试ToggleButton类的其他CSS属性,或者应用动画、转换、
JavaFX API中的各种视效。