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