JavaFX之RadioButton (2)

參考資料:《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保存了對剛剛選中的單選按鈕的引用

發佈了24 篇原創文章 · 獲贊 63 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章