原文地址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中的各种视效。
?