2016-08-04 44 views
1

我想用JavaFX(不是用控制檯)獲取用戶輸入的文本而沒有任何文本框,但是我堅持使用代碼。基本上我想要做的是在登錄頁面中,用戶將通過按下USB中的按鈕,從令牌USB接收隨機的OTP字符串,當表單處於活動狀態時,字符串將自動通過登錄頁面接收涉及任何文本字段。JavaFX在沒有任何文本框的情況下等待用戶輸入的文本

爲我能想出現在演示的代碼是這樣的:

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按鈕。

任何幫助表示讚賞。謝謝

+1

我認爲你唯一的選擇就是聽[onKeyPressed(https://docs.oracle.com/javase/8/javafx/api/javafx/scene /Scene.html#setOnKeyPressed-javafx.event.EventHandler-)並逐個跟蹤字符。 – Itai

+0

@sillyfly問題是這個輸入不是來自用戶輸入的內容,而是由這個令牌USB自動生成的,而且如果使用onKeyPressed,如果我有另一個用戶名的文本框,它也會被捕獲。 –

+0

推測USB令牌像鍵盤一樣操作,發送按鍵。如果它的工作方式不同,那麼你的問題應該包括更多關於它是如何工作的信息。 – Itai

回答

2

我可以幫你爵士。

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添加eventfliter和舞臺將是由UR USB鍵盤通知任何按鍵的第一。這是所有,很容易

希望它可以幫助

相關問題