JavaFX 單選按鈕

2018-03-04 15:24 更新

JavaFX教程 - JavaFX 單選按鈕


單選按鈕通常組合在一起以允許用戶進(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 RadioButton

創(chuàng)建單選按鈕

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é)果。

JavaFX RadioButton

單選按鈕焦點(diǎn)

在單選按鈕組中,默認(rèn)情況下第一個(gè)按鈕最初具有焦點(diǎn)。

當(dāng)使用setSelected方法選擇單選按鈕時(shí),我們還應(yīng)該使用requestFocus函數(shù)將焦點(diǎn)更改為所選單選按鈕。

rb.setSelected(true);
rb.requestFocus();
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)