首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使JavaFX文本字段不可见,但仍允许向其中输入文本

如何使JavaFX文本字段不可见,但仍允许向其中输入文本
EN

Stack Overflow用户
提问于 2019-03-25 04:23:43
回答 2查看 732关注 0票数 1

我有一个从条形码扫描仪获取输入的javaFX应用程序。条形码扫描器被识别为键盘,并且在扫描任何条形码之后总是在其输入后面加上换行符(因此触发onAction事件)。

目前,我有一个文本字段,这始终是重点和链接到条形码扫描仪,但我希望这是隐藏的用户。我尝试使用setVisible(False),但这似乎禁用了文本字段(onAction不会触发,文本字段始终为空)

我还试着将文本字段移出屏幕,但是,由于屏幕必须是可调整大小的,所以我现在必须使用gridPane作为根,所以不能再这样做了。

只是想知道是否有任何方法可以使文本字段对用户不可见,但仍然允许它被启用?

EN

回答 2

Stack Overflow用户

发布于 2019-03-25 20:15:16

您实际上不需要在场景中具有TextField。事实上,我不建议这样做,因为这会干扰焦点,可能还会影响布局。

相反,我会向场景中添加一个侦听器(或者场景的根节点,以确保它或后代可以通过将focusTraversable属性设置为true来获得焦点,如果需要的话)。如果使用KEY_PRESSED的节点可能具有焦点,则可能需要使用事件筛选器:

代码语言:javascript
复制
@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);
}
票数 0
EN

Stack Overflow用户

发布于 2019-03-25 06:00:53

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55328214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档