我试图用 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);
}
});
到目前为止,它工作正常,但有一个重要的例外 - 我不能使用 BR 的返回键 - 它似乎只是被忽略。按这个键完全没有反应。据我所知,任何其他键都可以按预期工作。
I noticed that CTRL-M works where Enter doesn't. So I just worked around this by putting a KeyListener
on the JFXPanel, changing the KeyChar
from 10 to 13 and reposting the event to the System Event Queue. This may stop working as intended later on if the HTMLEditor starts responding to both ENTER and CTRL-M though.
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) {}
});
现在有人有更好的主意吗?
Edit:我发现另一种获得所需效果的方法是安装自定义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;
}
});
This has the advantage of changing the original KeyEvent
rather than posting a new one afterwards, so that if HTMLEditor
were to start responding to Enter events we wouldn't be doubling up.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)