2016-01-29 65 views
0

我有JavaFX項目,在這個項目中,我必須聽鍵盤輸入,因爲我們的條形碼掃描器是這樣配置的。JavaFX:繼續收聽鍵盤輸入和開啓輸入執行動作

JavaFX中是否有任何庫可以讓偵聽器保持活動狀態,並在條碼掃描器接收字符串時執行適當的操作。

我在網上搜索,但不幸的是沒有找到任何好的解決方案。

這裏是我的代碼:

public class Main extends Application { 

     private Scene scene; 
     MyBrowser myBrowser; 

     @Override 
     public void start(Stage primaryStage) throws Exception{ 
      primaryStage.setTitle("Our Application"); 
      java.net.CookieManager manager = new java.net.CookieManager(); 
      java.net.CookieHandler.setDefault(manager); 

      myBrowser = new MyBrowser(); 
      scene = new Scene(myBrowser, 1080, 1920); 

      primaryStage.setScene(scene); 
      primaryStage.setFullScreen(true); 
      primaryStage.show(); 


     // @ being the escape character 
     scene.setOnKeyTyped(new EventHandler<KeyEvent>() { 
      @Override 
      public void handle(KeyEvent event) { 
       String text = event.getCharacter(); 
       if (text.equals("@")) { 
        String tempText = completeText; 
        completeText = ""; 
        processText(tempText); 
       }else { 
        completeText = completeText+text; 
       } 
      } 
     }); 

     } 

private void processText(String text){ 
     System.out.println("I will process "+text); 
    } 
     public static void main(String[] args) { 
      launch(args); 
     } 


    public class MyBrowser extends Region { 

     final String hellohtml = "index.html"; 

     WebView webView = new WebView(); 
     WebEngine webEngine = webView.getEngine(); 

    public MyBrowser() { 
      webEngine.getLoadWorker().stateProperty().addListener((observable, oldValue, newValue) -> { 
       if (newValue == Worker.State.SUCCEEDED) { 
        JSObject window = (JSObject) webEngine.executeScript("window"); 
        window.setMember("app", this); 
       } 
      }); 

      URL urlHello = getClass().getResource(hellohtml); 

      webEngine.load(urlHello.toExternalForm()); 
      webView.setPrefSize(1080, 1920); 
      webView.setContextMenuEnabled(false); 

      getChildren().add(webView); 
     } 

請讓我知道。謝謝。

+0

你是什麼意思「保持監聽活躍」?你的代碼中沒有監聽器,但是如果有的話,會導致它變爲不活動狀態? –

+0

@James_D:因爲我無法找到這樣的事件的偵聽器,所有我能找到的是基本的Scanner類,它一直在等待Enter鍵。 –

+1

您是否閱讀過任何[documentation](http://docs.oracle.com/javase/8/javafx/events-tutorial/convenience_methods.htm)?當然你只需要一個場景中的關鍵事件處理程序。 –

回答

0

所以我想我明白你的問題是什麼,你有一個條形碼掃描器,以條形碼的形式發送給你的應用程序,然後當你完成接收代碼時你需要響應整個條形碼?

如果是這種情況,您可以使用KeyListener截獲按鍵事件。然後你只需要實現邏輯來把各個關鍵事件放在一起。

class MyListener implements KeyListener{ 
    @Override 
    public void keyPressed(KeyEvent e) { 
     // Logic goes here 
    } 

    @Override 
    public void keyReleased(KeyEvent e) { 
     // Logic goes here 

    } 

    @Override 
    public void keyTyped(KeyEvent e) { 
     // Logic goes here 
    } 
} 
+0

我只在JavaFX類中做了這個。看看我的主要帖子。我正在尋找一些東西,當按鍵時我不會得到單個字符。 –