JavaFX HMTLEditor对'return'键没有反应

daj*_*ood 3 java javafx-2

我试图用JavaFX' HTMLEditor组件进行一些实验.我使用了以下代码(摘录):

    fxPanel=new JFXPanel();
    Platform.runLater(new Runnable() {
        @Override
        public void run() {
            Group group = new Group();
            scene = new Scene(group);               
            fxPanel.setScene(scene);
            view = VBoxBuilder.create().build();

            group.getChildren().add(view);


            edit = HTMLEditorBuilder.create().build();
           // toolPane = TabPaneBuilder.create().minHeight(60d).build();
            //toolPane.getTabs().add(new Tab("Allgemein"));

            view.getChildren().add(edit);

        }
    });

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            jPanel1.add(fxPanel);
        }
    });
Run Code Online (Sandbox Code Playgroud)

它到目前为止工作正常,有一个重要的例外 - 我不能使用BR的返回键 - 它似乎只是被忽略了.这根钥匙根本没有反应.据我所见,任何其他键都按预期工作.

Jul*_*ght 9

我注意到CTRL- M工作在哪里Enter没有.所以我只是通过KeyListener在JFXPanel上放置一个,将KeyChar10从13改为13并将事件重新发送到系统事件队列.如果HTMLEditor开始响应两者ENTER并且CTRL- M尽管如此,这可能会在以后停止工作.

fxPanel.addKeyListener(new KeyListener() {

    public void keyTyped(KeyEvent e) {
        if (e.getKeyChar() == 10) {
            e.setKeyChar((char) 13);
            Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(e);
        }
    }

    public void keyPressed(KeyEvent e) {}

    public void keyReleased(KeyEvent e) {}
});
Run Code Online (Sandbox Code Playgroud)

现在有人有更好的主意吗?

编辑:我发现另一种获得所需效果的方法是KeyEventDispatcher在当前键盘焦点管理器上安装自定义,如下所示:

KeyboardFocusManager kfm = DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager();
kfm.addKeyEventDispatcher(new KeyEventDispatcher() {
    @Override
    public boolean dispatchKeyEvent(KeyEvent e) {
        if (DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() == jfxPanel) {
            if (e.getID() == KeyEvent.KEY_TYPED && e.getKeyChar() == 10) {
                e.setKeyChar((char) 13);
            }
        }
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

这样做的好处是可以更改原始内容KeyEvent而不是之后发布新内容,这样如果HTMLEditor要开始响应Enter事件,我们就不会加倍.