我正在尝试使用 HTMLEditor 制作一个可编辑的控件(我想要一个像 Swing 的 JEditorPane 或 JTextPane 这样的富文本窗格,但似乎我需要等待几年)。我想让用户输入文本并且控件会变得适合。我尝试在滚动条出现时捕获一个事件并增加大小直到它消失,但我不知道如何等到 JavaFX 线程实际重新调整其父控件的大小。
可能有比这更好的方法......有什么想法吗?如果文本被删除,任何想法如何减少它?
TIA 迈克·沃茨
我正在尝试使用 HTMLEditor 制作一个可编辑的控件(我想要一个像 Swing 的 JEditorPane 或 JTextPane 这样的富文本窗格,但似乎我需要等待几年)。我想让用户输入文本并且控件会变得适合。我尝试在滚动条出现时捕获一个事件并增加大小直到它消失,但我不知道如何等到 JavaFX 线程实际重新调整其父控件的大小。
可能有比这更好的方法......有什么想法吗?如果文本被删除,任何想法如何减少它?
TIA 迈克·沃茨
对于编辑控件,使用contenteditable 设置为 true的 WebView ,如本示例或自定义 HTMLEditor。
使用类似于此编辑器的Java/JavaScript 桥与其交互。您可以使用 JQuery 编写 WebView 脚本。运行时间轴,使用JQuery 维度查询脚本轮询编辑控件的文本维度,并适当调整控件大小。
[旁注:我已经添加了这个作为答案,即使它只是来自jewelsea's的细节 - 我在回复评论时无法格式化代码]。
这在一定程度上起到了作用:
在 WebView 组件的 html 中,<div id='measured'>
在所有文本块周围添加了一个标签
setOnKeyPressed
使用和调用向 WebView 添加了一个处理程序checkHeight()
private int lastOffsetHeight;
private void checkHeight() {
int newHeight = (Integer)webview.getEngine().executeScript(
"document.getElementById(\"measured\").offsetHeight;") + 14;
if (newHeight != lastOffsetHeight) {
lastOffsetHeight = newHeight;
webview.setPrefHeight(newHeight);
}
}
这还不错,主要问题是如果所有文本都被删除,那么 WebView 组件会删除 div。正如jewelsea 提到的,JQuery 可能是一个更好的解决方案,但如果我解决了包含库的问题,我会更新它;-)