如何将JEditorPane插入JTable单元格?

我想把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()); 

看起来您需要为styledText变量处理null值。

不确定为什么需要自定义渲染器。 String类的默认渲染器是JLabel,JLabel支持HTML。