CN1应用问题:点击MultiButton时无法触发Picker弹窗
我明白你想实现的效果——点击MultiButton时弹出Picker的选择界面。你尝试通过事件分发的方式触发Picker的动作,但这种方法其实绕远路了,而且在Codename One里,Picker本身提供了更直接、可靠的API来实现这个需求。
正确的实现方式
不用手动分发事件,直接在MultiButton的ActionListener中调用Picker的showPicker()方法即可,这是官方专门用来触发Picker弹出的方法:
// 初始化Picker并配置选项 Picker picker = new Picker(); picker.setType(Picker.Type.STRINGS); picker.setStrings("苹果", "香蕉", "橙子"); // 初始化MultiButton MultiButton triggerBtn = new MultiButton("点击选择水果"); // 给MultiButton添加点击事件 triggerBtn.addActionListener(e -> { // 直接调用showPicker弹出选择界面 picker.showPicker(); });
额外:同步更新MultiButton的显示内容
如果需要在用户选择Picker选项后,把选中的内容显示在MultiButton上,可以给Picker添加ActionListener:
picker.addActionListener(e -> { // 更新MultiButton的主文本为选中的内容 triggerBtn.setTextLine1(picker.getSelectedString()); });
为什么你的原方法不生效?
你之前尝试手动分发PointerPressed事件的思路走偏了——Picker的弹出逻辑并不是单纯由ActionEvent触发的,它内部封装了自己的显示/隐藏逻辑,手动模拟事件无法触发它的弹出流程。直接调用showPicker()才是最稳妥的方式。
内容的提问来源于stack exchange,提问作者HelloWorld
相关产品推荐
相关产品推荐

