【问题标题】:JavaFX waiting user input's text without any textfieldJavaFX 等待用户输入的文本,没有任何文本字段
【发布时间】:2016-08-04 11:55:37
【问题描述】:

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

我现在能拿出来的presenter的代码是这样的:

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 按钮之前它不会显示登录页面。

感谢任何帮助。谢谢

【问题讨论】:

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

标签: java javafx


【解决方案1】:

先生,我可以帮你。

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
        }
    });

这就是代码的工作方式,因为您不希望 TextField 中断 调用在您的Stage 上添加一个事件过滤器,舞台将是第一个通过您的 USB 键盘收到任何按键通知的通知。就是这样,很简单

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2022-08-13
    • 2020-05-15
    • 2021-01-17
    相关资源
    最近更新 更多