gpt4 book ai didi

JavaFX HTMLEditor 文本更改监听器

转载 作者:行者123 更新时间:2023-11-30 06:20:14 26 4
gpt4 key购买 nike

我是 JavaFX 世界的新手,我似乎无法弄清楚如何在 HTMLEditor 组件中监听 text-modify 事件。

我需要这个,因为我正在将这个小部件连接到一个需要更新的模型。

具有 KeyEvent.KEY_TYPED 事件类型的 addEventFilter API 似乎没有正常工作。当它的处理程序被调用时,getHTMLText() 还没有用最新的字符更新(如果有人不理解这一段,我将提供一个循序渐进的例子)。

TextField 有一个 textProperty() 可以附加一个监听器。
现在 HTMLEditor 怎么样?

此外,最好只在文本修改事件上调用监听器(而不是在 CTRL+A 上调用,例如)。你知道……就像 SWT Text 的 addModifyListener()

最佳答案

在我的一个项目应用程序中使用 JavaFX HTMLEditor 时,我也遇到了类似的情况。我最终添加了一个按钮,单击该按钮将解析 HTML 文本,并执行进一步的任务。使用 AnchorPane,我可以在 HTMLEditor 上无缝添加 button,它看起来就像它的一部分。

无论如何,这里有一个小例子,说明如何在没有任何额外按钮的情况下实现你想要的:

package application;

import javafx.application.Application;
import javafx.event.EventHandler;
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 Main extends Application
{
@Override
public void start(Stage primaryStage)
{
try
{
final HTMLEditor editor = new HTMLEditor();
Scene scene = new Scene(editor);
primaryStage.setScene(scene);

editor.setOnKeyReleased(new EventHandler<KeyEvent>()
{
@Override
public void handle(KeyEvent event)
{
if (isValidEvent(event))
{
System.out.println(editor.getHtmlText());
}
}

private boolean isValidEvent(KeyEvent event)
{
return !isSelectAllEvent(event)
&& ((isPasteEvent(event)) || isCharacterKeyReleased(event));
}

private boolean isSelectAllEvent(KeyEvent event)
{
return event.isShortcutDown() && event.getCode() == KeyCode.A;
}

private boolean isPasteEvent(KeyEvent event)
{
return event.isShortcutDown() && event.getCode() == KeyCode.V;
}

private boolean isCharacterKeyReleased(KeyEvent event)
{
// Make custom changes here..
switch (event.getCode())
{
case ALT:
case COMMAND:
case CONTROL:
case SHIFT:
return false;
default:
return true;
}
}
});

primaryStage.show();
}
catch (Exception e)
{
e.printStackTrace();
}
}

public static void main(String[] args)
{
launch(args);
}
}

更新:经过更多思考,我找到了一种方法,即使在这些按钮点击时也能完成事件处理。方法如下:

EventHandler<MouseEvent> onMouseExitedHandler = new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent event)
{
System.out.println(editor.getHtmlText());
}
};

for (Node node : editor.lookupAll("ToolBar"))
{
node.setOnMouseExited(onMouseExitedHandler);
}

如果您看到 HTMLEditor,它有两个 ToolBars
我在代码中所做的是查找 这两个工具栏,并设置一个onMouseExited 事件处理程序。类比是,如果用户进入并在 HTML 文本上进行一些更改并退出工具栏,将触发一个事件,然后可以处理该事件。

您甚至可以根据需要在这两个工具栏上设置不同类型的事件处理程序,但在我看来,这些 onMouseExited 事件处理程序在与 一起使用时提供了非常广泛的覆盖范围onKeyReleased 事件处理程序。但是,基于 onMouseExited 处理程序的覆盖率并不准确。

关于JavaFX HTMLEditor 文本更改监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22128153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com