2017-09-28 8 views
0

すべてのシーンで、それぞれ2つのRadioButtonを持つ複数のtoggleGroupsがあります。どちらのRadioButtonを最初に選択したとしても、リスナーはそれを捕まえません。設定されたユーザーデータを保存するのではなく、まだnullです。私が2回目にそれを押すと、それは動作します。JavaFX:RadioButtonは最初のクリックでuserDataを変更しません

シーンを変更すると、これはまったく同じです。リスナーは最初のアクションを聞きません。

これは既知のバグですか?それはただの推測ですので、あなたは、たとえば、あなたが設定されていること、FXMLを共有していなかった

@FXML 
private void testing() { ... attach selectedToggleProperty of the ToggleGroup ... } 

:FXMLファイルで

@FXML private RadioButton rbCheck11; @FXML private RadioButton rbCheck12; 
@FXML private ToggleGroup group1; 
public static String[] values = new String[326]; 

@FXML 
private void testing() { 
rbCheck11.setUserData(1); rbCheck12.setUserData(0); 
group1.selectedToggleProperty().addListener((observable, oldValue, newValue) -> { 
     if (group1.getSelectedToggle() != null){ 
      values[0] = group1.getSelectedToggle().getUserData().toString(); 
     } 
    }); 
} 

答えて

1

あなたはtesting()でコールバックを接続します。私はこのようなのuserDataを保存しますtestingからRadioButton秒のonAction:この場合は

<RadioButton fx:id="rbCheck11" layoutX="121.0" layoutY="115.0" mnemonicParsing="false" 
    onAction="#testing" text="RadioButton"> 
    <toggleGroup> 
     <ToggleGroup fx:id="group1" /> 
    </toggleGroup> 
</RadioButton> 
<RadioButton fx:id="rbCheck12" layoutX="127.0" layoutY="166.0" mnemonicParsing="false" 
    onAction="#testing" text="RadioButton" toggleGroup="$group1" /> 

あなたはclicke場合testingは、のみ実行されますdをRadioButtonのいずれかに入力します。

testingは、ToggleGroupselectedPropertyにリスナーを接続する限り、リスナーは選択変更時にのみ実行されます。

さらに悪いことに、ラジオボタンを押すたびに新しいリスナーが追加されるため、グループにはリスナーが増えます。

は、この問題を解決FXMLファイルがロードされるとすぐに、一度だけのグループにそれを添付し、コントローラの initialize方法に testingの体を移動します。コントローラーから testingを完全に除去してください。

+0

素晴らしいです。私が以前に尋ねたことがあることを祈っています - 私はRadioButtons onActionをすべて設定するのに多くの時間を費やさなかったでしょう。 – jeypeu

関連する問題