參考資料:《Java8編程參考官方教程》(第9版)
之前對單選按鈕的處理是針對每一個單選按鈕,每一個單選按鈕都要依次設置事件。但是也有的時候,處理開關組也就是處理ToggleGroup會更加合適、方便。
代碼如下:
package review;
import javafx.application.*;
import javafx.geometry.Pos;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.beans.value.*;
public class RadioButtonDemo2 extends Application
{
RadioButton rb1,rb2,rb3;
ToggleGroup tg;
Label label;
public static void main(String[] args)
{
launch(args);
}
@Override
public void start(Stage stage) throws Exception
{
GridPane pane=new GridPane();
pane.setHgap(50);
pane.setVgap(30);
pane.setAlignment(Pos.CENTER);
rb1=new RadioButton("C++");
rb2=new RadioButton("Java");
rb3=new RadioButton("Paython");
tg=new ToggleGroup();
rb1.setToggleGroup(tg);
rb2.setToggleGroup(tg);
rb3.setToggleGroup(tg);
label=new Label("Please Select !");
tg.selectedToggleProperty().addListener(new ChangeListener<Toggle>(){
@Override
public void changed(ObservableValue<? extends Toggle> changed, Toggle oldVal, Toggle newVal)
{
RadioButton temp_rb=(RadioButton)newVal;
label.setText("Select "+temp_rb.getText());
}
});
pane.add(rb1, 0, 0);
pane.add(rb2, 1, 0);
pane.add(rb3, 2, 0);
pane.add(label, 1, 1);
Scene scene=new Scene(pane,500,200);
stage.setScene(scene);
stage.setTitle("RadioButtonDemo 2");
stage.show();
}
}
可以看到與直接處理RadioButton的區別是使用了這樣一段代碼:
tg.selectedToggleProperty().addListener(new ChangeListener<Toggle>(){
@Override
public void changed(ObservableValue<? extends Toggle> changed, Toggle oldVal, Toggle newVal)
{
RadioButton temp_rb=(RadioButton)newVal;
label.setText("Select "+temp_rb.getText());
}
});
使用時,需要添加 import javafx.beans.value.*; 語句。
首先,爲開關組(ToggleGroup)註冊了一個變化事件監聽器。爲了監聽變化事件,需實現ChangeListener接口。
void changed()方法中,oldVal傳遞舊值,newVal傳遞新值,上面代碼中newVal保存了對剛剛選中的單選按鈕的引用