JavaFX等待用户输入';s文本没有任何文本字段

JavaFX等待用户输入';s文本没有任何文本字段,java,javafx,Java,Javafx,我试图用JavaFX(而不是控制台)获取用户输入的文本,但是代码太多了。基本上,我想做的是,在登录页面中,用户将通过按下USB中的按钮,接收由令牌USB自动生成的随机OTP字符串,并且当表单处于活动状态时,该字符串将与登录页面一起自动接收,而不涉及任何文本字段 我现在可以给出演示者的代码如下: public class LoginBoxPresenterFinal implements Initializable { ... public void initialize(URL arg

我试图用JavaFX(而不是控制台)获取用户输入的文本,但是代码太多了。基本上,我想做的是,在登录页面中,用户将通过按下USB中的按钮,接收由令牌USB自动生成的随机OTP字符串,并且当表单处于活动状态时,该字符串将与登录页面一起自动接收,而不涉及任何文本字段

我现在可以给出演示者的代码如下:

public class LoginBoxPresenterFinal implements Initializable {

...
    public void initialize(URL arg0, ResourceBundle arg1) {
    ....
        Scanner reader = new Scanner(System.in);  
        String otp = reader.nextLine();
        System.out.println(otp);
}}
这段代码实际上是错误的,因为扫描器只会在Eclipse的控制台中接收输入,在我在控制台中键入内容并按下Enter按钮之前,它不会显示登录页面

感谢您的帮助。谢谢,先生,我可以帮你

Stage s = new Stage(StageStyle.DECORATED);//suppose this is your stage
    s.initModality(Modality.APPLICATION_MODAL);
    p = new Pane();
    p.setStyle("-fx-background-color: yellow");
    s.setScene(new Scene(p,150,150));
    s.show();
    s.addEventFilter(KeyEvent.KEY_RELEASED, new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent t) {
            if(t.getCode().equals(KeyCode.ENTER)){
               //this is when the user clicks enter meaning he is done or something
                //like that
            }else{
                //here the code detect keycodes other than enter to get them
                KeyCode kc = t.getCode();
                //now store kc somewhere and use it.
            }
            t.consume();//the consume here is because i do not want
            //the TextField to hear about the keypressed.
            //remove it if you want it to be notified
        }
    });
Stage s=新的Stage(StageStyle.decordent)//假设这是你的舞台
s、 初始模态(模态.应用程序\模态);
p=新窗格();
p、 设置样式(“-fx背景色:黄色”);
s、 setScene(新场景(第150150页));
s、 show();
s、 addEventFilter(KeyEvent.KEY_已发布,新的EventHandler(){
@凌驾
公共无效句柄(KeyEvent t){
如果(t.getCode().equals(KeyCode.ENTER)){
//这是当用户点击enter时,表示他已经完成了什么
//那样
}否则{
//这里的代码检测除enter以外的键代码以获取它们
keycodekc=t.getCode();
//现在将kc储存在某个地方并使用它。
}
t、 consume();//这里的消费是因为我不想
//要听到按键信息的文本字段。
//如果要通知它,请将其删除
}
});
这就是代码的工作方式,因为您不希望
TextField
中断 在你的
Stage
上调用add-eventfliter,该Stage将是第一个通过USB键盘收到任何按键通知的。就这么简单


希望它有帮助

我想你唯一的选择就是一个接一个地听和跟踪字符。@愚蠢的问题是,这个输入不是用户输入的,而是由这个令牌USB自动生成的,如果使用onKeyPressed,如果我有另一个用户名文本字段,它也会被捕获。大概USB令牌就像键盘一样工作,发送按键。如果它的工作原理不同,那么你的问题可能应该包括更多关于它实际工作原理的信息。@sillyfly我认为它的工作原理类似于键盘打字,在这种情况下,最后按下Enter按钮。我还是JavaFX新手,所以我不知道如何使用onKeyPressed接收用户的文本输入。你能帮忙吗?