无法强制选择器在按钮按下时显示
Posted
技术标签:
【中文标题】无法强制选择器在按钮按下时显示【英文标题】:Cannot force a Picker to show up on button press 【发布时间】:2018-05-02 04:49:36 【问题描述】:在我的 CN1 应用程序中有一个Multibutton
。当我按下它时,我希望触发在其addActionListener
方法中定义的Picker
操作。为此,我将我的 sn-p 基于https://www.codenameone.com/manual/events.html。
所以在Multibutton
addActionListener
方法中我添加了
listeners.fireActionEvent(new ActionEvent(picker, ActionEvent.Type.PointerPressed));
其中 listeners 是 EventDispatcher
对象,picker 是 Picker
对象。
在选择器addActionListener
我添加了
listeners.addListener(e);
但是,当我按下 Multibutton 时,Picker 不会被触发,尽管当我按下选取器(用于测试目的的布局)并验证选择时,它会打印出事件是 PointerPressed
而实际组件是 Picker
.
那么当用户按下(多)按钮时直接“打开” Picker 是否可以实现,以便用户不必按下按钮,然后按下 Picker 并最终验证选择。他们只需按下按钮并验证选择。
编辑 我加了
listeners.addListener(new ActionEvent(picker, ActionEvent.Type.PointerPressed));
在picker.addActionListener
方法之前,但现在我明白了
ActionEvent cannot be cast to ActionListener
关于对fireActionEvent
的调用。
非常感谢任何帮助!
【问题讨论】:
【参考方案1】:是的,当用户单击(多)按钮时,可以打开选取器。 试试这个代码:
Form hi = new Form("Hi World", BoxLayout.y());
MultiButton multiButton = new MultiButton("MultiButton");
Picker picker = new Picker();
multiButton.addActionListener(l ->
picker.pressed();
picker.released();
);
picker.setType(Display.PICKER_TYPE_STRINGS);
picker.setStrings("String 1", "String 2", "String 3");
picker.setSelectedStringIndex(0);
picker.addActionListener(l ->
Log.p("Picker selected string: " + picker.getSelectedString());
);
hi.add(multiButton).add(picker);
hi.show();
【讨论】:
简单高效!它按预期工作。我仍然想知道为什么会有这个fireActionEvent
。无论如何,谢谢@FrancescoGalgani
listeners.addListener(new ActionEvent(picker, ActionEvent.Type.PointerPressed));
正在向侦听器添加一个动作事件。您正在寻找fireActionEvent
@ShaiAlmog 我把这个 sn-p 中的一切都搞砸了!然后我尝试创建一个new ActionListener<ActionEvent>()
,并将其添加到listeners
,但无法使用fireActionEvent
启动它。 @FrancescoGalgani 的解决方案非常完美。我不知道我是否真的必须经历这两种状态(即pressed
和released
)。
如果你做其中之一,它不会起作用,所以你需要两个。以上是关于无法强制选择器在按钮按下时显示的主要内容,如果未能解决你的问题,请参考以下文章