Я использую 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;
}