如何将JEditorPane插入JTable单元格? [英] How to insert JEditorPane into JTable cell?

查看:163
本文介绍了如何将JEditorPane插入JTable单元格?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想把JEditorPane放在JTable单元格中。
我写了这个:

I want to put JEditorPane in JTable cell. I've written this:

jTabel1.setDefaultRenderer(String.class, new StringEditorPane());
.........
class StringEditorPane extends JEditorPane
    implements TableCellRenderer {

public StringEditorPane() {
    setContentType("text/html");
}



 public Component getTableCellRendererComponent(
            JTable table, Object styledString,
            boolean isSelected, boolean hasFocus,
            int row, int column) {
        if (isSelected) {
            String styledText = (String) styledString;
            setText(styledText);
            setBackground(getSelectionColor());
            return this;
        } else {
            String styledText = (String) styledString;
            setText(styledText);
            setBackground(Color.white);
            return this;
        }
    }
}

我可以编译它和它显示JEditorPane,但它也抛出异常,我不知道为什么。

I can compile it and it show JEditorPane but it also throws an exception and I don't know why.

异常:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.text.DefaultStyledDocument.getParagraphElement(DefaultStyledDocument.java:445)
    at javax.swing.text.StyledEditorKit$AttributeTracker.updateInputAttributes(StyledEditorKit.java:223)
    at javax.swing.text.StyledEditorKit$AttributeTracker.caretUpdate(StyledEditorKit.java:258)
    at javax.swing.text.JTextComponent.fireCaretUpdate(JTextComponent.java:391)
    at javax.swing.text.JTextComponent$MutableCaretEvent.fire(JTextComponent.java:4387)
    at javax.swing.text.JTextComponent$MutableCaretEvent.stateChanged(JTextComponent.java:4409)
    at javax.swing.text.DefaultCaret.fireStateChanged(DefaultCaret.java:782)
    at javax.swing.text.DefaultCaret.changeCaretPosition(DefaultCaret.java:1257)
    at javax.swing.text.DefaultCaret.handleSetDot(DefaultCaret.java:1153)
    at javax.swing.text.DefaultCaret.setDot(DefaultCaret.java:1134)
    at javax.swing.text.DefaultCaret$Handler.removeUpdate(DefaultCaret.java:1777)
    at javax.swing.text.AbstractDocument.fireRemoveUpdate(AbstractDocument.java:243)
    at javax.swing.text.AbstractDocument.handleRemove(AbstractDocument.java:608)
    at javax.swing.text.AbstractDocument.remove(AbstractDocument.java:576)
    at javax.swing.JEditorPane.setText(JEditorPane.java:1493)
    at myProject.StringEditorPane.getTableCellRendererComponent(MainWindow.java:136)
    at javax.swing.JTable.prepareRenderer(JTable.java:5720)
........

来自MainWindow.java的136行:

And the 136 line from MainWindow.java:

setText(styledText);

推荐答案

似乎从删除旧内容引发了崩溃。
尝试用新实例替换文档。在setText()之前调用

It seems the crash is thrown from removing old content. Try to replace document with a new instance. Before setText() call

setDocument(getEditorKit().createDefaultDocument());

这篇关于如何将JEditorPane插入JTable单元格?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆