1

我将带有 JLabel 的文本添加到 JTextPane,然后我需要更改 JTextPane 中所有 JLabel 中的文本。我该怎么做?

...
JTextPane pane = new JTextPane();
HTMLEditorKit kit = new CompEditorKit();
HTMLDocument doc = new HTMLDocument();
pane.setEditable(false);
pane.setContentType("text/html");
pane.setEditorKit(kit);
pane.setDocument(doc);
...
kit.insertHTML(doc, doc.getLength(), "Test<object align=\"left\" classid=\"javax.swing.JLabel\"><param name=\"text\" value=\"22\"></object>Test", 0, 0, null);
EditLabels(doc);
...
public void EditLabels(Document doc) {
    if (doc instanceof HTMLDocument) {
        Element elem = doc.getDefaultRootElement();
        ElementIterator iterator = new ElementIterator(elem);
        while ((elem = iterator.next()) != null) {
            AttributeSet attrs = elem.getAttributes();
            Object elementName = attrs.getAttribute(AbstractDocument.ElementNameAttribute);
            Object o = (elementName != null) ? null : attrs.getAttribute(StyleConstants.NameAttribute);
            if (o instanceof HTML.Tag) {
                if ((HTML.Tag) o == HTML.Tag.OBJECT) {
                    View view = new CompView(elem);
                    //View view = (View)super.create(elem); //ERROR
                    //if (view instanceof JLabel)
                    //{
                    //  ((JLabel) view).setText("NM");
                    //  JLabel label = (JLabel)view;
                    //}
                }
            }
        }
    }
}

例如

View view = new CompView(elem);
((JLabel) view).setText("NM");
error: inconvertible types
  required: JLabel
  found:    View

View view = (View)super.create(elem);
error: cannot find symbol
  symbol: method create(Element)
4

1 回答 1

1

好吧,您正在混合两种完全不同的东西——JLabel 是一个单独的 Swing 组件,它包含文本和图标,并且可以显示在任何容器中。JTextPane 是一个文本编辑器,它的文档不包含任何单独的 JLabel,这就是为什么在尝试将 View 转换为 JLabel 时会出现“不可转换类型”异常的原因。

View 只是通过将(在您的情况下)HTML 解析为结构化元素树而创建的各种元素的基础。

阅读一些关于 JTextPane 和其他类似组件的文档可能会有所帮助:http: //docs.oracle.com/javase/tutorial/uiswing/components/editorpane.html

于 2012-04-13T15:51:40.880 回答