我有一个从条形码扫描仪获取输入的javaFX应用程序。条形码扫描器被识别为键盘,并且在扫描任何条形码之后总是在其输入后面加上换行符(因此触发onAction事件)。
目前,我有一个文本字段,这始终是重点和链接到条形码扫描仪,但我希望这是隐藏的用户。我尝试使用setVisible(False),但这似乎禁用了文本字段(onAction不会触发,文本字段始终为空)
我还试着将文本字段移出屏幕,但是,由于屏幕必须是可调整大小的,所以我现在必须使用gridPane作为根,所以不能再这样做了。
只是想知道是否有任何方法可以使文本字段对用户不可见,但仍然允许它被启用?
发布于 2019-03-25 20:15:16
您实际上不需要在场景中具有TextField
。事实上,我不建议这样做,因为这会干扰焦点,可能还会影响布局。
相反,我会向场景中添加一个侦听器(或者场景的根节点,以确保它或后代可以通过将focusTraversable
属性设置为true
来获得焦点,如果需要的话)。如果使用KEY_PRESSED
的节点可能具有焦点,则可能需要使用事件筛选器:
@Override
public void start(Stage primaryStage) throws IOException {
StackPane root = new StackPane(new Button());
Scene scene = new Scene(root);
final StringBuilder string = new StringBuilder();
scene.addEventFilter(KeyEvent.KEY_PRESSED, evt -> {
KeyCode code = evt.getCode();
if (code.isDigitKey()) {
// input part of the information
String name = code.toString();
string.append(name.charAt(name.length() - 1)); // make sure numpad keys do not
} else if (code == KeyCode.ENTER) {
// submit input
submitCode(string.toString());
string.setLength(0);
}
});
primaryStage.setScene(scene);
primaryStage.show();
}
private void submitCode(String code) {
System.out.println(code);
}
发布于 2019-03-25 06:00:53
https://stackoverflow.com/questions/55328214
复制相似问题