我试图用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的返回键 - 它似乎只是被忽略了.这根钥匙根本没有反应.据我所见,任何其他键都按预期工作.
我注意到CTRL- M工作在哪里Enter没有.所以我只是通过KeyListener
在JFXPanel上放置一个,将KeyChar
10从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事件,我们就不会加倍.
归档时间: |
|
查看次数: |
2442 次 |
最近记录: |