java - 如何将 JEditorPane 插入 JTable 单元格?

标签 java swing jtable jeditorpane

我想将 JEditorPane 放入 JTable 单元格中。 我写了这个:

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,但它也会引发异常,我不知道为什么。

异常(exception):

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 行:

setText(styledText);

来自 getTableCellRendererComponent 函数。

最佳答案

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

setDocument(getEditorKit().createDefaultDocument());

关于java - 如何将 JEditorPane 插入 JTable 单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5147339/

相关文章:

java - Android: align_left 居中对齐

java - PLAF 无法更改按钮颜色

java:从popupmenu actionListener事件获取行数据

java - DefaultTableModel getValueAt 方法生成看似随机的结果

java - 为 JTable 中的每一行添加到数据库

java - 谷歌应用引擎 : Backend vs Frontend Instances

java - Struts 2 + Maven + Struts 2 Rest 插件帮助

java - SWT Combobox addSelectionListener() 的问题

java - 此方法(setSize、setDefaultCloseOperation... 对于 HelloFrame 类型未定义

java - 添加元素后 JList 调整大小