1. 程式人生 > >JavaFX UI控制元件教程(五)之Radio Button

JavaFX UI控制元件教程(五)之Radio Button

本章討論單選按鈕控制元件和RadioButton類,該類的一個專門實現ToggleButton

可以選擇或取消選擇單選按鈕控制元件。通常,單選按鈕組合成一個組,其中一次只能選擇一個按鈕。此行為將它們與切換按鈕區分開來,因為組中的所有切換按鈕都可以處於取消選擇狀態。

圖4-1顯示了RadioButton樣本的三個螢幕截圖,其中三個單選按鈕新增到一個組中。

圖4-1 RadioButton示例

請閱讀以下段落,以瞭解有關如何在應用程式中實現單選按鈕的更多資訊。

建立單選按鈕

JavaFX SDK包中提供的RadioButton類提供javafx.scene.control

了兩個建構函式,您可以使用它們建立單選按鈕。例4-1顯示了兩個單選按鈕。沒有引數的建構函式用於建立rb1。此單選按鈕的文字標題是使用該setText方法設定的。rb2的文字標題在相應的建構函式中定義。

例4-1建立單選按鈕

//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方法顯式選擇一個單選按鈕,並將其值指定為true。如果需要檢查使用者是否選擇了特定的單選按鈕,請應用該isSelected方法。

由於RadioButton該類是類的擴充套件,因此Labeled您不僅可以指定文字標題,還可以指定影象。使用該setGraphic方法指定影象。示例4-2演示瞭如何在應用程式中實現圖形單選按鈕。

示例4-2建立圖形單選按鈕

Image image = new Image(getClass().getResourceAsStream("ok.jpg"));
RadioButton rb = new RadioButton("Agree");
rb.setGraphic(new ImageView(image));

向組新增單選按鈕

單選按鈕通常用於組中以呈現多個互斥選項。該ToggleGroup物件提供對與其關聯的所有單選按鈕的引用並對其進行管理,以便一次只能選擇一個單選按鈕。例4-3建立一個切換組,建立三個單選按鈕,將每個單選按鈕新增到切換組,並指定應用程式啟動時應選擇哪個按鈕。

示例4-3建立一組單選按鈕

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);

當使用佈局容器佈置這些單選按鈕並將其新增到應用程式的內容時,輸出應類似於圖4-2

圖4-2組合中的三個單選按鈕

處理單選按鈕的事件

通常,應用程式在選擇組中的某個單選按鈕時執行操作。檢視示例4-4中的程式碼片段,瞭解如何根據選擇的單選按鈕更改圖示。

示例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);
            }                
        }
});

為每個單選按鈕分配了使用者資料。該ChangeListener<Toggle>物件檢查組中的選定切換。它使用該getSelectedToggle方法來識別當前選擇的單選按鈕,並通過呼叫該getUserData方法來提取其使用者資料。然後應用使用者資料來構造要載入的影象檔名。

例如,當選擇rb3時,該getSelectedToggle方法返回“rb3”,該getUserData方法返回“Contacts”。因此,該getResourceAsStream方法接收值“Contacts.jpg”。應用程式輸出如圖4-1所示。

請求關注單選按鈕

在單選按鈕組中,預設情況下第一個按鈕最初具有焦點。如果將該setSelected方法應用於組中的第二個單選按鈕,則應該會得到如圖4-3所示的結果。

圖4-3預設焦點設定

選擇第二個單選按鈕,第一個按鈕保持對焦。使用該requestFocus功能更改焦點,如例4-5所示。

例4-5請求第二個單選按鈕的焦點

rb2.setSelected(true);
rb2.requestFocus();

應用時,此程式碼生成如圖4-4所示的結果。

圖4-4設定所選單選按鈕的焦點

相關的API文件