【问题标题】:Multiple blinking cursors in the same Form同一表单中的多个闪烁光标
【发布时间】:2019-10-17 07:05:32
【问题描述】:

我在同一个表单中的所有文本字段中都有多个闪烁的光标。无论我在哪个 TextField 中输入,它们都在闪烁。

它发生在模拟器、Android、iOS 和 Javascript 中。

我无法生成测试用例:我所有的测试用例都很好,这种错误行为仅在我的应用中,在更改表单和可编辑状态后。

你能给我任何提示来理解/调查/解决这个问题吗?

谢谢

【问题讨论】:

  • 闪烁动画有一些问题,调整得非常精细,但可能调整得不够。如果文本字段有焦点,它应该只绘制光标,那么您是否可以在应用程序中以任何方式操纵焦点?
  • 也许吧。我没有使用requestFocus()setFocusable() 之类的方法显式操作焦点,但是我将不可编辑的TextFields 从具有领导组件的容器中删除到另一个没有领导组件的表单中的另一个容器,然后我使它们可编辑。要进行这种操作,我必须为每个 TextField 设置.getParent().setLeadCmp(null),否则我在点击时会出现 NullPointerException。
  • 我找到了解决这个问题的合适方法,所以我更新了我的答案。
  • 是的,您不能从那里更改主要组件层次结构或重用元素。对此有一些假设。我需要考虑如何防止这种情况发生

标签: codenameone


【解决方案1】:

更新答案

我的旧答案仅包含一个临时解决方法(field.setCursorBlinkTimeOff(1000 * 3600); 代表所有 TextFields),它有几个问题会造成糟糕的使用体验。

现在我找到了一个合适的解决方案,那就是不要重复使用相同的TextFields (从具有领导组件的“容器 A”中删除它并将它们放入另一个“容器 B”没有领导者组件)。这个问题与“Container A”有一个Leader Component有关。

因此,在这种情况下,我的解决方案是从“容器 A”中删除文本字段,并使用以下方法将新的文本字段添加到“容器”B:

private Component replaceWithNewTextField(Component cmp) {
        if (cmp instanceof TextField) {
            // it creates the new TextField
            TextField field = new TextField();
            field.setUIID(cmp.getUIID());
            field.setText(((TextField) cmp).getText());
            field.setName(((TextField) cmp).getName());
            field.setEditable(((TextField) cmp).isEditable());
            ((TextArea) field).setSingleLineTextArea(((TextArea) cmp).isSingleLineTextArea());
            ((TextArea) field).setRows(((TextArea) cmp).getRows());
            ((TextArea) field).setConstraint(((TextArea) cmp).getConstraint());

            etc. 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 2011-10-30
    • 2014-09-30
    • 2011-07-31
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多