單選按鈕通常組合在一起,以便用戶進行單選,即用戶只能在單選按鈕列表中選擇一個項目。 例如,當(dāng)選擇鞋子尺寸時,我們通常從列表中選擇一個尺寸。
單選按鈕只能執(zhí)行:選擇或取消選擇。
以下代碼顯示,當(dāng)放置在ToggleGroup
中時,只能選擇一個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òu)造函數(shù)。
要為其標(biāo)簽創(chuàng)建一個帶有空字符串的單選按鈕,然后再設(shè)置標(biāo)簽。
RadioButton rb = new RadioButton();
//setting a text label
rb.setText("Size 9");
要創(chuàng)建具有指定標(biāo)簽的單選按鈕。
RadioButton rb2 = new RadioButton("Size 9");
setSelected()
方法帶有true
參數(shù)可以顯式選擇單選按鈕。isSelected()
方法返回用戶是否選擇了特定單選按鈕。setGraphic()
方法可以為RadioButton
安裝一個圖像。
Image image = new Image(getClass().getResourceAsStream("Size.jpg"));
RadioButton rb = new RadioButton("Size 9");
rb.setGraphic(new ImageView(image));
單選按鈕通常在組中使用。
我們可以添加單選按鈕到ToggleGroup
對象,它將管理它們,使得一次只能選擇一個單選按鈕。
以下代碼創(chuàng)建一個切換組和三個單選按鈕,然后將每個單選按鈕添加到切換組,并指定應(yīng)選擇哪個按鈕。
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
。為每個單選按鈕分配了用戶數(shù)據(jù)。ChangeListener
對象檢查組中的選定項目。 所選單選按鈕從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;
// at W W W.Y iI bAI.C OM
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();
}
}
上面代碼執(zhí)行結(jié)果如下所示 -
在單選按鈕組中,默認情況下第一個按鈕最初具有焦點。
當(dāng)使用setSelected
方法選擇單選按鈕時,還應(yīng)該使用requestFocus
函數(shù)將焦點更改為所選單選按鈕。
rb.setSelected(true);
rb.requestFocus();