【问题标题】:Javafx TextField positions the caret incorrectly after pressing delete key按下删除键后,Javafx TextField 错误地定位插入符号
【发布时间】:2020-07-03 19:01:19
【问题描述】:

试试这个简单的 Javafx 代码:

TextField text1 = new TextField("abc");
TextField text2 = new TextField("abc");
HBox root = new HBox(text1, text2);
Scene scene = new Scene(root, 800, 600);
stage.setScene(scene);
stage.show();

现在,如果您单击 TextField 将插入符号定位在“b”字符之前,那么如果您按 DEL 键删除“b”,您会注意到插入符号通常向左移动一个字符而不是原地不动:

注意:您必须使用鼠标单击“b”才能将插入符号移动到那里。如果您使用键盘箭头键将插入符号移到那里,则不会发生此错误。

您可能需要重复几次才能看到此效果。 在我的 Windows 10 计算机中,它发生的次数超过 70%。

这是一个已知的错误吗?有解决办法吗?

【问题讨论】:

  • 很高兴你也可以复制它。我搜索了 OpenJDK 错误,但找不到现有的错误报告。我想我应该做一个。
  • @Slaw 对我来说都是 textFields,但仅在索引 1 处(并且仅在单击该索引时,而不是通过导航到达它)- fx11 和当前开发人员(希望有一个神奇的一面-当前正在修复的效果..但是如果我们需要它,魔法在哪里;)
  • @Slaw 看起来像 caretPosition 是正确的(未更改),但插入符号绘制在错误的位置.. 这类似于 bugs.openjdk.java.net/browse/JDK-8210145 (尽管该错误中的上下文与具有过滤器的 TextFormatter 不同) - 知道我在某处/不知何故见过它..
  • 在我的情况下,索引不一定重置为 0。它会向左移动,因此如果您尝试索引 10,结果将位于索引 9。但正如有人已经指出的那样,这只是一个渲染错误。插入符号实际上保持在正确的位置,但在错误的索引处呈现。我提交了一个错误。当它被分配一个时会发布链接。
  • 实际上,hitInfo 本身似乎没问题(前导标志打开/关闭取决于字符被击中的位置),但出于某种奇怪的原因,后来使用前导/不移动textNode 的插入符号向前/向后使其与控件插入符号不同步,这导致(?不知道究竟为什么)视觉怪癖(如果皮肤认为,这也具有禁用向前键盘导航的效果 - 正确地,作为控件的插入符号是 - 它已经在最后)

标签: javafx textfield


【解决方案1】:

我向 OpenJDK 报告了这个问题:

https://bugs.openjdk.java.net/browse/JDK-8248914

OpenJDK 开发人员已确认这是一个真正的错误。

【讨论】:

  • 太棒了 :) 添加了对此 qa 的引用
  • 仅供参考:优先级提高到 p3 - 运气好的话,可能会在 fx16 中修复 :)
  • 哦,太好了!没想到您是 OpenJDK 贡献者!是否没有机会在 fx15 中包含潜在的修复?
  • 总有机会 - 虽然我怀疑在这种情况下会发生这种情况:fx15 处于第一次减速阶段,第二次在月底开始,所以直到有文本专家并愿意修复它快速并说服项目负责人它是无风险的..
猜你喜欢
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多