單選按鈕通常組合在一起以允許用戶進(jìn)行單選,即用戶只能在單選按鈕列表中選擇一個(gè)項(xiàng)目。例如,當(dāng)選擇鞋子尺寸時(shí),我們通常從列表中選擇一個(gè)尺寸。
選擇或取消選擇單選按鈕。
以下代碼顯示,當(dāng)放置在ToggleGroup中時(shí),只能選擇一個(gè)RadioButton。
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.RadioButton; import javafx.scene.control.ToggleGroup; import javafx.scene.layout.HBox; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage stage) { HBox root = new HBox(); Scene scene = new Scene(root, 300, 150); stage.setScene(scene); stage.setTitle(""); ToggleGroup group = new ToggleGroup(); RadioButton button1 = new RadioButton("select first"); button1.setToggleGroup(group); button1.setSelected(true); RadioButton button2 = new RadioButton("select second"); button2.setToggleGroup(group); root.getChildren().add(button1); root.getChildren().add(button2); scene.setRoot(root); stage.show(); } public static void main(String[] args) { launch(args); } }
上面的代碼生成以下結(jié)果。
javafx.scene.control包中的RadioButton類有兩個(gè)構(gòu)造函數(shù)。
要為其標(biāo)簽創(chuàng)建一個(gè)帶有空字符串的單選按鈕,然后再設(shè)置標(biāo)簽。
RadioButton rb = new RadioButton(); //setting a text label rb.setText("Size 9");
要?jiǎng)?chuàng)建具有指定標(biāo)簽的單選按鈕
RadioButton rb2 = new RadioButton("Size 9");
帶有true參數(shù)的setSelected()方法可以顯式選擇單選按鈕。
isSelected
方法返回用戶是否選擇了特定單選按鈕。
setGraphic
方法可以為RadioButton安裝一個(gè)圖像。
Image image = new Image(getClass().getResourceAsStream("Size.jpg")); RadioButton rb = new RadioButton("Size 9"); rb.setGraphic(new ImageView(image));
單選按鈕通常用在組中。
我們可以添加單選按鈕到ToggleGroup
對象,它將管理它們,使得一次只能選擇一個(gè)單選按鈕。
下面的代碼創(chuàng)建一個(gè)切換組和三個(gè)單選按鈕,然后將每個(gè)單選按鈕添加到切換組,并指定應(yīng)該選擇哪個(gè)按鈕。
ToggleGroup group = new ToggleGroup(); RadioButton rb1 = new RadioButton("Size 9"); rb1.setToggleGroup(group); rb1.setSelected(true); RadioButton rb2 = new RadioButton("Size 10"); rb2.setToggleGroup(group); RadioButton rb3 = new RadioButton("Size 11"); rb3.setToggleGroup(group);
我們通過ToggleGroup處理單選按鈕選擇的事件。更改偵聽器添加到ToggleGroup。
為每個(gè)單選按鈕分配了用戶數(shù)據(jù)。
ChangeListener對象檢查組中的選定項(xiàng)目。所選單選按鈕從getSelectedToggle方法返回。然后我們通過調(diào)用getUserData方法獲取用戶數(shù)據(jù)。
rb1.setUserData("Home") rb2.setUserData("Calendar"); rb3.setUserData("Contacts"); final ToggleGroup group = new ToggleGroup(); group.selectedToggleProperty().addListener( (ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle) -> { if (group.getSelectedToggle() != null) { System.out.println(group.getSelectedToggle().getUserData().toString()); } } });
完整的源代碼。
import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.geometry.Insets; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.RadioButton; import javafx.scene.control.Toggle; import javafx.scene.control.ToggleGroup; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class Main extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) { Scene scene = new Scene(new Group()); stage.setWidth(250); stage.setHeight(150); final ToggleGroup group = new ToggleGroup(); RadioButton rb1 = new RadioButton("A"); rb1.setToggleGroup(group); rb1.setUserData("A"); RadioButton rb2 = new RadioButton("B"); rb2.setToggleGroup(group); rb2.setUserData("B"); RadioButton rb3 = new RadioButton("C"); rb3.setToggleGroup(group); rb3.setUserData("C"); group.selectedToggleProperty().addListener(new ChangeListener<Toggle>() { public void changed(ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle) { if (group.getSelectedToggle() != null) { System.out.println(group.getSelectedToggle().getUserData().toString()); } } }); HBox hbox = new HBox(); VBox vbox = new VBox(); vbox.getChildren().add(rb1); vbox.getChildren().add(rb2); vbox.getChildren().add(rb3); vbox.setSpacing(10); hbox.getChildren().add(vbox); hbox.setSpacing(50); hbox.setPadding(new Insets(20, 10, 10, 20)); ((Group) scene.getRoot()).getChildren().add(hbox); stage.setScene(scene); stage.show(); } }
上面的代碼生成以下結(jié)果。
在單選按鈕組中,默認(rèn)情況下第一個(gè)按鈕最初具有焦點(diǎn)。
當(dāng)使用setSelected
方法選擇單選按鈕時(shí),我們還應(yīng)該使用requestFocus函數(shù)將焦點(diǎn)更改為所選單選按鈕。
rb.setSelected(true); rb.requestFocus();
更多建議: