2017-11-23 5 views
0

私はRadioButtonで作業しており、後でそれらを識別するためにsetUserDataメソッドを使用しようとしています。この話題について自分自身を教育した後、私はの参照を使用してsetUserDataToggleの参考文献を使用してgetUserDataをこのOracle article(例4-4)と同様に使用できると考えていました。RadioButton // setUserDataとgetUserDataが期待どおりに動作しない

今、これは私の望むやり方ではうまくいかず、多くの不満を招いています。私は発見した、私は同じを得ることができないことを発見したuserDatagroup.getSelectedToggle()を使用した後に返されるToggle参照に適用するときに私はRadioButtonリファレンスを使用して設定しました。なぜ誰が知っていますか?どのように私はこの問題を優雅に避けることができますか?

SampleController.javaファイルで私の問題を明確にするようにしました。このファイルは下記にあります。あなたが参照してくださいよfor loopは...

マイMain.java私が思いついた最初のアイデアですが、間違いなく適切な解決策ではありません。

public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) { 
     try { 
     Parent root = FXMLLoader.load(getClass().getResource("/application/sample.fxml")); 
     primaryStage.setTitle("Demo"); 
     primaryStage.setScene(new Scene(root, 400, 400)); 
     primaryStage.show(); 
     } catch (Exception e) { 
      System.out.println(e.toString() + 
        "\n" + e.getCause()); 
     } 

    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

マイsample.fxml:

<VBox id="VBox" prefHeight="200" prefWidth="320" 
      xmlns:fx="http://javafx.com/fxml/1" 
      fx:controller="application.SampleController"> 

    <Label text="Select a time, then press the button" /> 

    <fx:define> 
     <ToggleGroup fx:id="group" /> 
    </fx:define> 

    <RadioButton id="rBtn1" text="Button 1" toggleGroup="$group" /> 
    <RadioButton id="rBtn2" text="Button 2" toggleGroup="$group" /> 
    <RadioButton id="rBtn3" text="Button 3" toggleGroup="$group" /> 

</VBox> 

マイSampleController.java:

public class SampleController implements Initializable { 

    @FXML 
    ToggleGroup group = new ToggleGroup(); 

    RadioButton rBtn1 = new RadioButton(); 
    RadioButton rBtn2 = new RadioButton(); 
    RadioButton rBtn3 = new RadioButton(); 

    @Override 
    public void initialize (URL url, ResourceBundle rb) { 

     rBtn1.setUserData("Button 1"); 
     rBtn2.setUserData("Button 2"); 
     rBtn3.setUserData("Button 3"); 

     System.out.println(rBtn1.getUserData()); // prints 'Button 1' 

     System.out.println(group.getToggles().get(0).getUserData()); // prints 'null' 

     List<Toggle> toggles = group.getToggles(); 
     int i = 1; 
     for (Toggle t : toggles) { 
      t.setUserData("Button " + i); 
      i++; 
     } 

     System.out.println(group.getToggles().get(0).getUserData()); // prints 'Button 1' 

    } 

} 

答えて

1

rBtn1に "id"の代わりに "fx:id"を使用するのを忘れてしまいました。つまり、rBtn1はfxmlファイルのrBtn1と同じではありません。

変更:

<RadioButton id="rBtn1" text="Button 1" toggleGroup="$group" /> 
<RadioButton id="rBtn2" text="Button 2" toggleGroup="$group" /> 
<RadioButton id="rBtn3" text="Button 3" toggleGroup="$group" /> 

に:

<RadioButton fx:id="rBtn1" text="Button 1" toggleGroup="$group" /> 
<RadioButton fx:id="rBtn2" text="Button 2" toggleGroup="$group" /> 
<RadioButton fx:id="rBtn3" text="Button 3" toggleGroup="$group" /> 

はあなたの問題を解決します。

これをやって:

System.out.println(group.getToggles().get(0).getUserData()); // prints 'null' 

あなたは正しいFXを持っているあなたのグループからノードトラバーサルによって到達することができますFXMLファイルからrBtn1を参照しています。ID。

あなたがやっているとき:

t.setUserData("Button " + i); 

とやり直しを:

System.out.println(group.getToggles().get(0).getUserData()); // prints 'null' 

値は、グループ横断で設定され、したがって、期待値を返してきました。

は、ローカルクラス変数rBtn1のUserDataを設定するだけです。

+0

これは単純な方法です。私が観察したが、すばやく修正することで解決できるいくつかのその他の小さな問題は、はるかに明確です。どうもありがとう! – barbarossa

関連する問題