我使用 JTextPane 作为表格单元格渲染器来显示富文本。当文本太长而无法放入单元格时,它会被截断。我想模仿 JLabel 行为,即显示省略号 (...) 以提醒用户部分文本不可见。有没有人这样做过?
在 StanislavL 的帮助下,我最终采用了解决方案。该算法的工作原理是在 末尾一次切掉一个字符StyledDocument
,附加“...”并将生成的首选宽度与表格单元格宽度进行比较。这是低效的,特别是在字符串很长的情况下,但在我的情况下不是问题。可以优化。以下内容进入您的渲染器getTableCellRendererComponent
m_dummyTextPane.setDocument(doc);
m_dummyTextPane.setSize(Short.MAX_VALUE, table.getRowHeight());
int width = m_dummyTextPane.getPreferredSize().width;
int start = doc.getLength() - 1;
while(width >= table.getColumnModel().getColumn(col).getWidth() && start>0) {
try {
doc.remove(Math.min(start, doc.getLength()),
doc.getLength() - Math.min(start, doc.getLength()));
doc.insertString(start, "...", null);
} catch (BadLocationException e) {
e.printStackTrace();
break;
}
start--;
width = m_dummyTextPane.getPreferredSize().width;
}