2015-09-06 15 views
5

Tôi đang làm việc trên JavaFX 8 và SceneBuilder. Tôi đã tạo một số nút radio trong Tệp FXML và chỉ định tên toggleGroup vào danh sách nút radio trong đó. Vì vậy, bây giờ tôi muốn có được nút radio được chọn của toggleGroup trong bộ điều khiển của mình, tôi có cần phải thực hiện lại tất cả các nút radio như các trường trong bộ điều khiển hay chỉ một đối tượng toggleGroup. nút radio đó, không phải đối tượng nút).Cách nhận nút radio đã chọn từ ToggleGroup

Trả lời

11

Giả sử bạn có nhóm chuyển đổi và ba nút radio thuộc nhóm đó.

ToggleGroup group = new ToggleGroup(); 

RadioButton rb1 = new RadioButton("RadioButton1"); 
rb1.setUserData("RadioButton1"); 
rb1.setToggleGroup(group); 
rb1.setSelected(true); 

RadioButton rb2 = new RadioButton("RadioButton2"); 
rb2.setUserData("RadioButton2"); 
rb2.setToggleGroup(group); 

RadioButton rb3 = new RadioButton("RadioButton3"); 
rb3.setUserData("RadioButton3"); 
rb3.setToggleGroup(group); 

Khi bạn chọn nút radio từ nhóm chuyển đổi đó, phương thức changed(...) sau đây sẽ được gọi.

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()); 
      // Do something here with the userData of newly selected radioButton 

     } 

    } 
}); 
+0

Tôi đã hỏi nếu tôi reqd. để làm cho 3 RadioButton một lần nữa trong bộ điều khiển (sau khi đã thực hiện chúng trong FXML), hoặc tôi chỉ có thể làm cho đối tượng ToggleGroup và truy cập vào nút được chọn bằng cách nào đó. –

+0

@Rounaq_intel, thử chỉ cần thêm nhóm chuyển đổi vào bộ điều khiển và thêm người nghe vào câu trả lời ở trên. –

+0

Cảm ơn, chỉ là những gì tôi đang tìm kiếm. – Kefirchiks

9

Điều này chưa bao giờ được trả lời đúng hoặc kỹ lưỡng, vì vậy tôi nghĩ tôi sẽ đăng giải pháp mà tôi nhận được.

Khi bạn tạo nút radio trong SceneBuilder, thì C ALNG sử dụng SceneBuilder để gán chúng cho một nhóm. Cách bạn truy cập nhóm đó thông qua Bộ điều khiển là đầu tiên tạo một biến loại ToggleGroup trong Bộ điều khiển và đặt tên giống với tên bạn đã tạo trong SceneBuilder. Sau đó, bạn có thể sử dụng nó. Dưới đây là ví dụ giả tạo về cách tôi đã thực hiện:

// your imports 
public class Controller 
{ 
    @FXML ToggleGroup myGroup; //I called it myGroup in SceneBuilder as well. 

    public void myGroupAction(ActionEvent action) 
    { 
     System.out.println("Toggled: " + myGroup.getSelectedToggle().getUserData().toString()); 
    } 

    public void initialize() 
    { 
     //whatever initialize code you have here 
    } 
} 

Mặc dù văn bản trả về từ thuộc tính getUserData dài. Đây là một cách để có được chỉ là tên của nút radio:

myGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>() 
    { 
    @Override 
    public void changed(ObservableValue<? extends Toggle> ov, Toggle t, Toggle t1) 
     { 
     RadioButton chk = (RadioButton)t1.getToggleGroup().getSelectedToggle(); // Cast object to radio button 
     System.out.println("Selected Radio Button - "+chk.getText()); 
     } 
    }); 

Hy vọng điều này sẽ giúp người xuống đường ...

6
@FXML 
ToggleGroup right; //I called it right in SceneBuilder. 

sau đâu đó trong phương pháp.

RadioButton selectedRadioButton = (RadioButton) right.getSelectedToggle(); 
String toogleGroupValue = selectedRadioButton.getText(); 
+0

Nhanh chóng và đơn giản! – marw

Các vấn đề liên quan