我正在使用JEditorPane来显示html文本。如果html文件包含
<form action="WORK3.html" method="get">
<input type="text" value="Enter your name here!" size="25">
</form>
JEditorPane将在编辑器小部件中放置一个文本字段小部件。我想要做的是检索文本字段中的值。如何检索文本字段的文本值或窗口小部件?
答案 0 :(得分:1)
HTML控件被添加到包含在私有内部类中的JEditorPane中.Invalidator扩展了Container。
因此,您可以获得JEditorPane的所有子组件。它们中的每一个都应该是Invalidator实例。 Invalidator的唯一子项是编辑组件本身(例如,<input>
标签的JTextFlied。)
答案 1 :(得分:0)
感谢Stanislav花时间回答。试图检索组件对我来说太难了。我找到了解决问题的方法。我希望这会帮助别人。虽然我找不到访问窗口小部件的方法,但我可以创建自己的文本窗口小部件并替换默认窗口小部件。这样我可以控制小部件。为此,您必须继承HTMLEditorKit.HTMLFactory。在本课程中,您需要覆盖
public View create (Element elem_) {
Document doc = elem_.getDocument();
Object obj = elem_.getAttributes().
getAttribute(StyleConstants.NameAttribute);
HTML.Tag tag = (HTML.Tag) obj;
if (tag.toString().equals ("input")) {
// you can replace your widget here if you want
// i choose to use the default but save the view for
// my own use later
ComponentView view = (ComponentView)super.create (elem_);
// save the component view to where you want to access
// later. you can retrieve the component from the
// ComponentView and cast it to back to JTextField
_editor.saveView (view);
return (view);
}
else {
return (super.create (elem_);
}
}
对于您要控制的每种类型的窗口小部件,您必须至少执行一次此操作。这是一种痛苦,但它确实起了作用。
答案 2 :(得分:0)
当你在textPane中插入一个组件时,你只需要从它的Invalidator类中“解开”它。
//Loop through the components, maybe looking for some in particular
for (Component cont : myTextPane.getComponents()) {
//Unwrap your component, means take the only one component from the wrapper container
Component comp = ((Container) cont).getComponent(0);
//Do your things with your component
// ...
}