我有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)
所以我想我明白你的问题是什么,你有一个条形码扫描器,它将条形码作为关键事件发送到你的应用程序,然后当你接收到代码时你需要回复整个条形码?
如果是这种情况,您可以使用KeyListener拦截按键事件。然后,您只需要实现逻辑以将各个键事件放在一起。
<View style={{ height:60 }}>
<TextInput style={{ flex:1, backgroundColor: '#ededed' }} />
</View>