You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaFX中获取选中单选按钮的文本内容?

解决JavaFX单选按钮文本写入文件的问题

你的核心问题是错误调用了获取选中状态的API,导致拿到的是布尔值而非按钮文本。selectedProperty().getValue()返回的是该Toggle是否被选中的状态(true/false),不是你需要的按钮显示文本。

解决方案1:直接获取RadioButton的文本

因为你的ToggleGroup里的元素都是RadioButton,只需将getSelectedToggle()强制转换为RadioButton,再调用getText()即可拿到设置的"Small Cake"/"Medium Cake"/"Large Cake":

修改保存按钮的事件代码,替换错误的那一行:

saveBtn.setOnAction(e -> {
    try {
        BufferedWriter writer = new BufferedWriter(new FileWriter("Order.txt"));
        writer.write(number.getText());
        writer.newLine();
        writer.write(name.getText());
        writer.newLine();
        
        // 获取选中的蛋糕尺寸文本
        if (cakeSize.getSelectedToggle() != null) {
            RadioButton selectedSizeBtn = (RadioButton) cakeSize.getSelectedToggle();
            writer.write(selectedSizeBtn.getText());
        } else {
            // 处理未选择尺寸的情况,比如写入默认值或提示
            writer.write("未选择尺寸");
        }
        
        writer.newLine();
        writer.write(cakeSelection.getValue());
        writer.close();
    } catch (IOException err) {
        err.printStackTrace();
    }
});

解决方案2:获取初始的"Small"/"Medium"/"Large"文本

如果你不需要setText()后的完整文本,只想拿到初始的简短名称,可以给每个RadioButton设置userData:

先修改RadioButton的创建代码:

RadioButton cakeSm = new RadioButton("Small");
cakeSm.setText("Small Cake");
cakeSm.setUserData("Small"); // 存储简短名称

RadioButton cakeMd = new RadioButton("Medium");
cakeMd.setText("Medium Cake");
cakeMd.setUserData("Medium");

RadioButton cakeLg = new RadioButton("Large");
cakeLg.setText("Large Cake");
cakeLg.setUserData("Large");

然后在保存时读取userData:

if (cakeSize.getSelectedToggle() != null) {
    writer.write(cakeSize.getSelectedToggle().getUserData().toString());
} else {
    writer.write("未选择尺寸");
}

关键注意事项

  • 一定要加cakeSize.getSelectedToggle() != null的判断,避免用户未选择任何尺寸时触发NullPointerException。
  • 如果你想优化用户体验,还可以在未选择尺寸时弹出警告对话框,比如用Alert组件提示用户选择后再保存。

内容的提问来源于stack exchange,提问作者DevSteph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:10:33