如何获取Picker选中日期、传递至下类并实现Done按钮关闭对话框?
问题解决:Picker取值与对话框关闭问题
你的代码存在两个核心问题:
- 在对话框弹出之前就获取了Picker的值,此时用户还未进行任何选择,拿到的只是初始化的默认日期,并非用户最终选择的结果。
- 未给Picker绑定Done按钮的触发逻辑,导致点击Done后既不会关闭对话框,也不会更新选中的值。
以下是修正后的代码:
if (nplans == null) { Dialog dlg = new Dialog(""); Picker datePicker = new Picker(); datePicker.setUseLightweightPopup(true); datePicker.setDate(new Date()); // 设置初始显示日期 dlg.setLayout(new BorderLayout()); dlg.addComponent(CENTER, datePicker); // 给Picker添加Done按钮的回调监听 datePicker.addActionListener(e -> { if(e.getCommand().equals("Done")){ // 用户点击Done后,获取选中的日期 selectedDate = datePicker.getValue().toString(); // 关闭对话框 dlg.dispose(); // 展示选中的日期结果 Dialog.show("Selected Date", selectedDate, "OK", null); } }); dlg.setDisposeWhenPointerOutOfBounds(true); dlg.showPacked(CENTER, true); } else { new Plan(); } } catch(IOException err) { Log.e(err); }
关键修改说明:
- 将获取
selectedDate的逻辑移至Picker的ActionListener内部,仅在用户点击Done按钮时执行,确保拿到的是用户选择后的真实值。 - 在回调中调用
dlg.dispose(),实现点击Done后关闭对话框的需求。 - 删除了原代码中提前执行的取值和弹窗逻辑,避免获取到无效的默认值。
内容的提问来源于stack exchange,提问作者curtjacobs1
相关产品推荐
相关产品推荐

