JavaFX UI控件教程(五)之Radio Button
翻譯自??Radio Button
本章討論單選按鈕控件和RadioButton類(lèi),該類(lèi)的一個(gè)專(zhuān)門(mén)實(shí)現(xiàn)ToggleButton。
可以選擇或取消選擇單選按鈕控件。通常,單選按鈕組合成一個(gè)組,其中一次只能選擇一個(gè)按鈕。此行為將它們與切換按鈕區(qū)分開(kāi)來(lái),因?yàn)榻M中的所有切換按鈕都可以處于取消選擇狀態(tài)。
圖4-1顯示了RadioButton樣本的三個(gè)屏幕截圖,其中三個(gè)單選按鈕添加到一個(gè)組中。
圖4-1 RadioButton示例
請(qǐng)閱讀以下段落,以了解有關(guān)如何在應(yīng)用程序中實(shí)現(xiàn)單選按鈕的更多信息。
?
創(chuàng)建單選按鈕
JavaFX SDK包中提供的RadioButton類(lèi)提供javafx.scene.control了兩個(gè)構(gòu)造函數(shù),您可以使用它們創(chuàng)建單選按鈕。例4-1顯示了兩個(gè)單選按鈕。沒(méi)有參數(shù)的構(gòu)造函數(shù)用于創(chuàng)建rb1。此單選按鈕的文本標(biāo)題是使用該setText方法設(shè)置的。rb2的文本標(biāo)題在相應(yīng)的構(gòu)造函數(shù)中定義。
例4-1創(chuàng)建單選按鈕
//A radio button with an empty string for its label RadioButton rb1 = new RadioButton(); //Setting a text label rb1.setText("Home"); //A radio button with the specified label RadioButton rb2 = new RadioButton("Calendar");您可以使用該setSelected方法顯式選擇一個(gè)單選按鈕,并將其值指定為true。如果需要檢查用戶是否選擇了特定的單選按鈕,請(qǐng)應(yīng)用該isSelected方法。
由于RadioButton該類(lèi)是類(lèi)的擴(kuò)展,因此Labeled您不僅可以指定文本標(biāo)題,還可以指定圖像。使用該setGraphic方法指定圖像。示例4-2演示了如何在應(yīng)用程序中實(shí)現(xiàn)圖形單選按鈕。
示例4-2創(chuàng)建圖形單選按鈕
Image image = new Image(getClass().getResourceAsStream("ok.jpg")); RadioButton rb = new RadioButton("Agree"); rb.setGraphic(new ImageView(image));
向組添加單選按鈕
單選按鈕通常用于組中以呈現(xiàn)多個(gè)互斥選項(xiàng)。該ToggleGroup對(duì)象提供對(duì)與其關(guān)聯(lián)的所有單選按鈕的引用并對(duì)其進(jìn)行管理,以便一次只能選擇一個(gè)單選按鈕。例4-3創(chuàng)建一個(gè)切換組,創(chuàng)建三個(gè)單選按鈕,將每個(gè)單選按鈕添加到切換組,并指定應(yīng)用程序啟動(dòng)時(shí)應(yīng)選擇哪個(gè)按鈕。
示例4-3創(chuàng)建一組單選按鈕
final ToggleGroup group = new ToggleGroup();RadioButton rb1 = new RadioButton("Home"); rb1.setToggleGroup(group); rb1.setSelected(true);RadioButton rb2 = new RadioButton("Calendar"); rb2.setToggleGroup(group);RadioButton rb3 = new RadioButton("Contacts"); rb3.setToggleGroup(group);當(dāng)使用布局容器布置這些單選按鈕并將其添加到應(yīng)用程序的內(nèi)容時(shí),輸出應(yīng)類(lèi)似于圖4-2。
圖4-2組合中的三個(gè)單選按鈕
?
處理單選按鈕的事件
通常,應(yīng)用程序在選擇組中的某個(gè)單選按鈕時(shí)執(zhí)行操作。查看示例4-4中的代碼片段,了解如何根據(jù)選擇的單選按鈕更改圖標(biāo)。
示例4-4單選按鈕的處理操作
ImageView image = new ImageView();rb1.setUserData("Home") rb2.setUserData("Calendar"); rb3.setUserData("Contacts");final ToggleGroup group = new ToggleGroup(); group.selectedToggleProperty().addListener(new ChangeListener<Toggle>(){public void changed(ObservableValue<? extends Toggle> ov,Toggle old_toggle, Toggle new_toggle) {if (group.getSelectedToggle() != null) {final Image image = new Image(getClass().getResourceAsStream(group.getSelectedToggle().getUserData().toString() + ".jpg"));icon.setImage(image);} } });為每個(gè)單選按鈕分配了用戶數(shù)據(jù)。該ChangeListener<Toggle>對(duì)象檢查組中的選定切換。它使用該getSelectedToggle方法來(lái)識(shí)別當(dāng)前選擇的單選按鈕,并通過(guò)調(diào)用該getUserData方法來(lái)提取其用戶數(shù)據(jù)。然后應(yīng)用用戶數(shù)據(jù)來(lái)構(gòu)造要加載的圖像文件名。
例如,當(dāng)選擇rb3時(shí),該getSelectedToggle方法返回“rb3”,該getUserData方法返回“Contacts”。因此,該getResourceAsStream方法接收值“Contacts.jpg”。應(yīng)用程序輸出如圖4-1所示。
?
請(qǐng)求聚焦單選按鈕
在單選按鈕組中,默認(rèn)情況下第一個(gè)按鈕最初具有焦點(diǎn)。如果將該setSelected方法應(yīng)用于組中的第二個(gè)單選按鈕,則應(yīng)該會(huì)得到如圖4-3所示的結(jié)果。
圖4-3默認(rèn)焦點(diǎn)設(shè)置
選擇第二個(gè)單選按鈕,第一個(gè)按鈕保持對(duì)焦。使用該requestFocus功能更改焦點(diǎn),如例4-5所示。
例4-5請(qǐng)求第二個(gè)單選按鈕的焦點(diǎn)
rb2.setSelected(true); rb2.requestFocus();應(yīng)用時(shí),此代碼生成如圖4-4所示的結(jié)果。
圖4-4設(shè)置所選單選按鈕的焦點(diǎn)
?
相關(guān)的API文檔?
-
RadioButton
-
Labeled
-
ToggleGroup
總結(jié)
以上是生活随笔為你收集整理的JavaFX UI控件教程(五)之Radio Button的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何在查看QQ空间发布过的照片
- 下一篇: JavaFX UI控件教程(六)之Tog