如何访问JEditorPane中的小部件?

时间:2012-04-12 19:50:57

标签: java html swing jeditorpane

我正在使用JEditorPane来显示html文本。如果html文件包含

<form action="WORK3.html" method="get">
  <input type="text" value="Enter your name here!" size="25">
</form>

JEditorPane将在编辑器小部件中放置一个文本字段小部件。我想要做的是检索文本字段中的值。如何检索文本字段的文本值或窗口小部件?

3 个答案:

答案 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
    // ...      
}