首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RadioButton // setUserData和getUserData不像预期的那样工作

RadioButton // setUserData和getUserData不像预期的那样工作
EN

Stack Overflow用户
提问于 2017-11-23 20:00:32
回答 1查看 829关注 0票数 0

我正在使用RadioButton,并尝试使用setUserData方法,以便稍后识别它们。在对自己进行了有关这个主题的教育之后,我一直在想,我可以使用setUserData引用RadioButton,而getUserData以后使用Toggle引用,就像在这个甲骨文中所做的那样(示例4-4)。

现在,这并没有实现我想要的方式,并导致了很多挫折。我发现,在对在使用userData后返回的Toggle引用上应用getUserData时,无法获得使用RadioButton引用设置的相同的Toggle。有人知道为什么吗?或者我怎样才能优雅地避免这个问题?

我试图在我的SampleController.java文件中明确我的问题,您可以在下面找到。您将看到的for loop是我提出的第一个想法,但绝对不是一个合适的解决方案.

我的Main.java:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
<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:

代码语言:javascript
运行
复制
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'

    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-23 20:50:07

您忘记对rBtn1使用"fx:id“而不是"id”..。这意味着rBtn1与fxml文件中的rBtn1不一样。

改变:

代码语言:javascript
运行
复制
<RadioButton id="rBtn1" text="Button 1" toggleGroup="$group" />
<RadioButton id="rBtn2" text="Button 2" toggleGroup="$group" />
<RadioButton id="rBtn3" text="Button 3" toggleGroup="$group" />

至:

代码语言:javascript
运行
复制
<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" />

会解决你的问题。

当这样做时:

代码语言:javascript
运行
复制
System.out.println(group.getToggles().get(0).getUserData()); // prints 'null'

您正在引用fxml文件中的rBtn1,您可以通过组中的节点遍历来访问该文件,该文件具有正确的fx:id。

当你在做:

代码语言:javascript
运行
复制
t.setUserData("Button " + i);

和重做:

代码语言:javascript
运行
复制
System.out.println(group.getToggles().get(0).getUserData()); // prints 'null'

该值已通过组遍历设置,因此返回预期值。

代码语言:javascript
运行
复制
rBtn1.setUserData("Button 1");

只是设置本地类变量rBtn1 1的UserData。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47462609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档