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

我有一个javaFX应用程序,它从条形码扫描仪获取输入。条形码扫描仪被识别为键盘,并且在扫描任何条形码后始终在其输入后以换行符显示(因此会触发 onAction 事件)。

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

我还尝试将文本字段从屏幕上移开,这确实有效,但是因为屏幕必须可调整大小,我现在必须使用gridPane作为根,因此无法再执行此操作。

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


MMTTMM
浏览 159回答 3
3回答

DIEA

您可以使用css隐藏文本字段。最简单的方法是将不透明度设置为 0文本字段.css.hidden{    -fx-opacity: 0;}爪哇岛GridPane root = new GridPane();// Add stylesheetroot.getStylesheets().add("TextField.css");TextField textField = new TextField();// Add classtextField.getStyleClass().add("hidden");另一方面,我真的会问自己,这个“黑客”是否是要走的路。如果您的条形码扫描仪只是插入文本,也许更好的解决方案是添加一个事件处理程序并相应地处理击键:事件处理程序root.addEventHandler(KeyEvent.ANY,(event)->{    System.out.println(event);});

米琪卡哇伊

您实际上不需要在场景中有一个。事实上,我不建议这样做,因为这会干扰焦点,并可能干扰布局。TextField相反,我会向场景添加一个侦听器(或场景的根节点,以确保它或后代可以通过将属性设置为 ,如有必要)来获得焦点)。您可能需要使用事件过滤器,如果使用 的事件过滤器的节点可能具有焦点:focusTraversabletrueKEY_PRESSED@Overridepublic 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);}

Cats萌萌

尝试使用TextField.setText(java.lang.String)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java