java - 在 CodenameOne 中,为什么复选框未选中但显示为选中?

标签 java checkbox codenameone selected

我遇到了一个奇怪的问题 - 不确定 CN1 中是否存在编码错误或错误。

基本上,我创建一行 CheckBox 对象并将它们放入可 X 滚动的容器中。如果我单击一个未选定的项目并拖动直到“弹性”效果将其拉回,则它似乎已被选中,但代码不会将其记录为选定状态。

请观看以下有关该问题的视频: https://youtu.be/EtputE1kjyo

请注意,在控制台输出中,当已选择字段时,“selected”一词将大写;当未选择字段时,“selected”一词将小写。焦点也是如此(我将焦点添加到输出中以确定 setFocusable() 是否按预期工作,这样焦点就不会导致选择错误)。

这是复选框创建代码:

cb = new CheckBox(getCacheableImageMaxHeight(mod.getIconFile(),moduleImageHeight));
cb.setName(mod.getModuleID());
cb.setToggle(true);
cb.setUIID("ModuleButton");
cb.setFocusable(false);
cb.setScrollVisible(false);
cb.setTextPosition(Component.BOTTOM);
cb.setCloudDestinationProperty(cb.getName());

//actionlistener added for debugging only
final CheckBox cbFinal = cb;
final String modName = mod.getDisplayName();
cb.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent evt) {
        System.out.println(modName+", "+(cbFinal.isSelected()?"SELECTED":"selected") + ", " + (cbFinal.hasFocus()?"FOCUS":"focus"));
    }
});
c.addComponent(cb);

更新:我意识到这里有两个“国家”正在交战: 切换按钮(我现在意识到它们不仅仅是复选框,因为我设置了“setToggle(true)”)在被拖动并以“弹性”效果释放时卡在“按下”状态。不幸的是,“按下”和“选定”状态具有相同的外观,这意味着我的用户认为他们在拖动操作期间卡在“按下”状态时认为他们已经选择了某些内容。

这是我所做的更多调试。
Pressed AND Selected!

  • 第一个按钮被按下,但未被选择(错误)。
  • 第二个按钮被正常选择并且没有显示错误。
  • 第三个按钮很有趣,因为我选择了它,然后拖动并释放它以使其被选择并按下!

因此问题变为:这种情况是否已经存在一个 Unresolved 错误(释放按钮后按下状态会卡住),如果是这样,现在是否有修复或解决方法?

最佳答案

只需将选定状态的样式设置为与按下状态不同,它就应该可以正常工作。

在触摸设备中,手指抬起时不会呈现选定状态。这几乎总是正确的,除非您更改了 Display 中的标志或设置了一些神秘的主题常量。

关于java - 在 CodenameOne 中,为什么复选框未选中但显示为选中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42649767/

相关文章:

将长数组写入文件的Java代码

java - 在 CentOS7 上安装 Ant、JDK 和 JRE,之后仍然无法启动 .bat 文件

java - Spring - 捕获 bean 创建异常

javascript - 动态创建表上的复选框(每行最多仅选择 1 个)

codenameone - 在 codenameone 中显示的 html 文本非常小

java - 如何从 hdfs 上的文件加载类型安全的 configFactory?

javascript - 选中复选框时显示隐藏字段?

javascript - 为什么jquery不检查复选框

ios - 代号一-从URL下载txt文件在iOS中不起作用

java - 键盘降低屏幕高度问题 - codenameone