如何在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
相关产品推荐
相关产品推荐

