JavaFX HTMLEditor忽略了在red hat上的输入

时间:2018-07-20 18:05:02

标签: javafx redhat html-editor

我试图弄清如何绕过被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可以执行任何操作。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这对我有用,获得了“ Enter”键以实际插入新行。似乎HTMLEditorSkin中的私有方法未正确调用。请注意,这不是一个很好的解决方案,我认为这是一个丑陋的破解。

{{1}}