User interface 自动调整JavaFX2 HTMLEditor控件的大小
我正在尝试使用HTMLEditor创建一个可编辑控件(我想要一个像Swing的JEditorPane或JTextPane这样的富文本窗格,但似乎我需要等待几年才能实现)。我想让用户在文本中输入,控件也随之增长。我曾尝试在滚动条出现时捕捉事件并增大大小,直到它消失,但我无法确定如何等待JavaFX线程实际重新调整其父控件的大小 可能还有比这更好的方法。。。有什么想法吗?如果删除了文本,有没有办法减少它User interface 自动调整JavaFX2 HTMLEditor控件的大小,user-interface,javafx-2,rich-text-editor,User Interface,Javafx 2,Rich Text Editor,我正在尝试使用HTMLEditor创建一个可编辑控件(我想要一个像Swing的JEditorPane或JTextPane这样的富文本窗格,但似乎我需要等待几年才能实现)。我想让用户在文本中输入,控件也随之增长。我曾尝试在滚动条出现时捕捉事件并增大大小,直到它消失,但我无法确定如何等待JavaFX线程实际重新调整其父控件的大小 可能还有比这更好的方法。。。有什么想法吗?如果删除了文本,有没有办法减少它 TIA Mike Watts对于编辑控件,请使用类似于此或的Web视图 使用类似于此的方法与it
TIA Mike Watts对于编辑控件,请使用类似于此或的Web视图
使用类似于此的方法与it进行交互。你可以。运行一个使用and轮询编辑控件文本维度的。对于编辑控件,请使用类似此或a的WebView
使用类似于此的方法与it进行交互。你可以。运行一个,使用and轮询编辑控件的文本维度。[旁注:我添加了这个作为答案,即使它只是jewelsea的详细信息-我在作为注释回复时无法格式化代码] 这在一定程度上起了作用: 在WebView组件的html中,在所有文本块周围添加了标记
使用setOnKeyPressed
向WebView添加了一个处理程序,该处理程序调用checkHeight()
这还不算太糟糕,主要问题是如果删除了所有文本,那么WebView组件就会删除div。正如jewelsea提到的,JQuery可能是一个更好的解决方案,但如果我解决了包含库的问题,我会更新它;-) [旁注:我添加了这个作为答案,尽管它只是jewelsea的详细信息-我无法在作为注释回复时格式化代码] 这在一定程度上起了作用: 在WebView组件的html中,在所有文本块周围添加了标记
使用setOnKeyPressed
向WebView添加了一个处理程序,该处理程序调用checkHeight()
这还不算太糟糕,主要问题是如果删除了所有文本,那么WebView组件就会删除div。正如jewelsea提到的,JQuery可能是一个更好的解决方案,但如果我解决了包含库的问题,我会更新它;-) 多亏了这一点——是的,我曾考虑过这一点,但正如您可能理解的那样,这是一个相当曲折的过程(创建从Java编写的JavaScript,如果使用JQuery,则需要链接到外部库),因此测试非常耗时,很难顺利实现。我希望用好的ol'Java来编写它……我已经把它设置为可接受的答案,因为它似乎是唯一合理的,所以再次感谢你的答案。问题(正如我所怀疑的)是试图链接到JQuery——我已经为此打开了另一个问题!多亏了这一点——是的,我曾考虑过这一点,但正如您可能理解的那样,这是一个相当曲折的过程(创建从Java编写的JavaScript,如果使用JQuery,则需要链接到外部库),因此测试非常耗时,很难顺利实现。我希望用好的ol'Java来编写它……我已经把它设置为可接受的答案,因为它似乎是唯一合理的,所以再次感谢你的答案。问题(正如我所怀疑的)是试图链接到JQuery——我已经为此打开了另一个问题!使用jQuery的height()函数尝试了这一点:没有上面显示的效果好(乍一看操作有点不可预测)。更重要的是,将jQuery放在那里是一件痛苦的事情:我最终将jQuery.js放在了[java]sources目录中;使用
getClass()(从第一眼看,这个操作有点不可预测)。此外,把jQuery放在那里是一件痛苦的事情:我最终把jQuery.js放在了[java]源目录中;使用getClass().getResourceAsStream(“jQuery.js”)
将文件读入字符串,然后在WebView上设置html时,将该字符串作为脚本写入(而不是使用src
属性)。
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);
}
}