- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个自定义组件,它扩展了 TextField 并允许对特定类型的字符串进行高级编辑。
箭头键已被重新定义以允许特定行为并且应该不会触发默认的插入符移动但是我似乎无法阻止它移动。我已经使用了()我能想象到的每一种类型的事件,插入符号在按下箭头键时总是会移动。
此外,当输入一个新字母时,首先要对其进行验证,如果发现无效,则撤消编辑。但是,插入符号总是移动一个位置,而当您输入的字母无效时,插入符号不应移动。
我目前有适当的逻辑,可以将插入符号移动到正确的位置,以便控件或多或少地工作,唯一的问题是用户看到插入符号在代码试图对抗默认移动时疯狂地跳来跳去。
有趣的一点:我为控件提供了一个上下文菜单,当显示上下文菜单时,插入符号停止其默认移动(或者它突然足够快以至于用户看不到它)。
我正在深入研究上下文菜单的源代码,看看它是否设置或取消设置某些内容,但我没有看到它。有什么想法可以停止文本字段的默认插入符号移动吗?
最佳答案
您可以使用事件过滤器来阻止节点处理左右箭头:
textField.addEventFilter(KeyEvent.ANY, new EventHandler<KeyEvent>() {
@Override public void handle(KeyEvent keyEvent) {
switch (keyEvent.getCode()) {
case LEFT:
case RIGHT:
keyEvent.consume();
}
}
});
虽然这样做有点奇怪,因为 TextField 将不再像用户通常期望的那样行事。
可执行样本
import javafx.application.*;
import javafx.beans.*;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TextFieldControl extends Application {
@Override public void start(Stage stage) {
final TextField textField = new TextField("Phone: ");
textField.addEventFilter(KeyEvent.ANY, new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent keyEvent) {
switch (keyEvent.getCode()) {
// block cursor control keys.
case LEFT:
case RIGHT:
case UP:
case DOWN:
case PAGE_UP:
case PAGE_DOWN:
case HOME:
case END:
keyEvent.consume();
// allow deletion and tab.
case DELETE:
case BACK_SPACE:
case TAB:
return;
}
// only allow digits and a few punctuation symbols to be entered.
if (!"0123456789-() ".contains(keyEvent.getCharacter())) {
keyEvent.consume();
}
}
});
textField.focusedProperty().addListener(new InvalidationListener() {
@Override public void invalidated(Observable observable) {
// due to some weirdness JavaFX will auto select the text when the text field
// receives focus, so instead deselect and position the caret at the end of the field.
// Another weird thing is that a pulse must be run before the deselection or caret
// positioning request occurs or it won't take effect, so a runnable seems to suffic to ensure that.
Platform.runLater(new Runnable() {
@Override public void run() {
textField.deselect();
textField.positionCaret(textField.getText().length());
}
});
}
});
VBox layout = new VBox();
layout.getChildren().setAll(new VBox(textField, new TextField()));
stage.setScene(new Scene(layout));
stage.show();
textField.requestFocus();
}
public static void main(String[] args) {
launch(args);
}
}
关于JavaFX 文本字段 : disabling cursor movement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16441080/
Cesium SandcaSTLe demo说明了使用“movement”和“movement.endPosition”来获取鼠标移动的 Cartesian2 坐标。一个例子是 "Picking" d
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我一直在玩 webGL,我已经达到了可以制作图形非常可怜的小型三维游戏的程度(到目前为止,它更多的是概念/功能的证明)。对于三维体验来说,向任意方向无限移动鼠标来旋转第一人称视角是很不错的。 Poin
这是我第一次在这里写文章。我对 JQuery 动画有一些问题:当持续时间非常慢(例如 10000)时, Action 不够平滑。我的 div 需要一个“自然”的运动。有人知道我的问题的解决方案吗?或者
我正在开发离线 FPS 多人游戏。 当 Player Rotation 值为 (0,0,0) 时,Player 会朝着完美的方向移动。但是,我的问题是当我使用触摸输入旋转相机时。玩家也可以旋转脸部并按
我在分布式系统中遇到分片移动问题。 【问题】 最初每个分区负责任意数量的分片。 (这个数字可以是任意的,因为系统支持将分片从一个分区移动到另一个分区) 然后一个新的分区来了,系统需要重新分片。目标是使
是否可以在窗口中停止鼠标移动并仅允许在特定框中移动? 例如,我有一个div,其宽度:200px和高度:200px,只允许在此div中移动鼠标。 谢谢。 最佳答案 Javascript 可以读取鼠标位置
我创建了一个自定义组件,它扩展了 TextField 并允许对特定类型的字符串进行高级编辑。 箭头键已被重新定义以允许特定行为并且应该不会触发默认的插入符移动但是我似乎无法阻止它移动。我已经使用了()
我创建了一个自定义组件,它扩展了 TextField 并允许对特定类型的字符串进行高级编辑。 箭头键已被重新定义以允许特定行为并且应该不会触发默认的插入符移动但是我似乎无法阻止它移动。我已经使用了()
我想做一个函数,根据传递的字母改变特定的值。 (这些基本上给出了方向:东,西......) 代码是: data Movement = N Int | S Int | E Int | W Int de
我正在从事一个非常酷的项目,我正在收集有关光标移动的数据,但我遇到了一个问题,我认为我需要一些帮助。我不断读取有关光标 x 和 y 位置的数据(以及其他相关数据),一旦光标在 y 维度上超过某个阈值,
我怎样才能在 Sprite 被施加这样的冲动后停止它: player.physicsBody!.applyImpulse(CGVectorMake(50, 0)) 是否有可能使运动在一段时间内减少?
我有一个子菜单,当悬停在导航元素上时,它会变为可见。当该元素不再悬停时,子菜单将变为不可见并向上移动。我已经在下面附上了我的部分代码。我面临的问题是,由于子菜单就在导航元素的正下方,向上移动会在转换期
我是 Unity 新手,正在关注 this tutorial .当我尝试执行代码时遇到的错误应该是左右移动播放器是: UnassignedReferenceException: The variabl
谷歌最近在那里重新设计了移动行为 map 。现在在移动设备上,您可以用两根手指移动 map 。 (请参阅手机上的 map-simple 示例,而不是任何浏览器模拟器!)。 我想在 openlayer
据我了解,GPS 的精度有限。是否有可能在 3D 空间中获得一个人的更精确的位置? 我计划编写一个应用程序,用户可以将手机向任何方向移动,但只需要移动几英尺。是否有任何技术(也许使用加速度计和陀螺仪)
如何防止图像移动。如果图像的位置 = 350,如何防止移动。类似于遏制,恰恰相反。请帮忙。 $('#image').draggable( {
这是我应该问的问题,而不是这个: Emacs evil: space as a prefix key in motion state 我想定义一堆用于移动、移动、打开和关闭窗口和缓冲区的命令,这些命令
我是计算机类三人组的三分之一(高中新生)。对于我们的项目,我们决定用 Java 制作一个吃 bean 人风格的游戏。我们都没有太多经验,所以到目前为止,我们基本上都是在自学。我们已经取得了相当大的进步
我正在开发一个类似 HTML5 3D fps 的引擎,它看起来已经相当不错,但由于这可能是制作 3D 的最糟糕的语言选择之一,因此有时会出现明显的延迟。 我将运动 (WASD) 编程为独立于渲染速度,
我是一名优秀的程序员,十分优秀!