我试图弄清如何绕过被JavaFX HTMLEditor忽略的enter键。
操作系统:
Redhat Enterprise Linux Workstation 7.5
Java:
java version "10.0.1" 2018-04-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)
Enter键不起作用,但Control-M起作用。我试图通过拦截所有回车键来解决此问题,然后将其替换为回车。但是,当我以编程方式触发回车键事件时,什么也没发生。
我的测试代码是:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.web.HTMLEditor;
import javafx.stage.Stage;
public class HTMLEditorTest extends Application {
@Override
public void start(Stage stage) {
stage.setTitle("HTMLEditor Test");
final HTMLEditor htmlEditor = new HTMLEditor();
Scene scene = new Scene(htmlEditor, 800, 800);
htmlEditor.addEventFilter(KeyEvent.KEY_PRESSED, event ->
{
//System.out.println(htmlEditor.getHtmlText());
if (event.getCode() == KeyCode.M && event.isControlDown())
{
System.out.println("\nSource: " + event.getSource().getClass().getName());
System.out.println("Target: " + event.getTarget().getClass().getName());
System.out.println("Character: '" + event.getCharacter().hashCode() + "'");
System.out.println("Text: '" + event.getText() + "'");
System.out.println("Text: '" + event.getText().hashCode() + "'");
System.out.println("Shift Down: " + event.isShiftDown());
System.out.println("Control Down: " + event.isControlDown());
System.out.println("Meta Down: " + event.isMetaDown());
System.out.println("Alt Down: " + event.isAltDown() + "\n");
}
if (event.getCode() == KeyCode.ENTER)
{
KeyEvent ke = new KeyEvent(KeyEvent.KEY_PRESSED, "", "\r", KeyCode.M, false, true, false, false);
KeyEvent.fireEvent(event.getTarget(), ke);
}
});
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
如果运行此命令并键入'Control-M',则<p><br></p>
将插入htmlText中。
如果您键入“ Enter”,即使我触发了一个应该触发与“ Control-M”相同的反应的按键事件,也不会发生任何反应。
为了对此进行调查,我打印出了所有我可以在'Control-M'生成的KeyEvent和我触发的KeyEvent上获得的信息。据我所知,它们是相同的。
当我键入“ Enter”时,拦截“ Enter” KeyEvent,然后启动新的KeyEvent:
<html dir="ltr"><head></head><body contenteditable="true"></body></html>
Source: javafx.scene.web.HTMLEditor
Target: javafx.scene.web.WebView
Character: '0'
Text: '
'
Text: '13'
Shift Down: false
Control Down: true
Meta Down: false
Alt Down: false
当我输入'Control-M'时:
<html dir="ltr"><head></head><body contenteditable="true"><p><br></p></body></html>
Source: javafx.scene.web.HTMLEditor
Target: javafx.scene.web.WebView
Character: '0'
Text: '
'
Text: '13'
Shift Down: false
Control Down: true
Meta Down: false
Alt Down: false
它们看起来相同,但是只有通过实际键入'Control-M'生成的KeyEvent可以执行任何操作。
有什么想法吗?
答案 0 :(得分:0)
这对我有用,获得了“ Enter”键以实际插入新行。似乎HTMLEditorSkin中的私有方法未正确调用。请注意,这不是一个很好的解决方案,我认为这是一个丑陋的破解。
{{1}}