リッチテキストを表示するためのテーブルセルレンダラーとしてJTextPaneを使用しています。テキストが長すぎてセル内に収まらない場合、テキストは切り捨てられます。JLabelの動作を模倣したいと思います。つまり、テキストの一部が表示されないことをユーザーに警告するために省略記号(...)を表示します。誰かがこれを以前にやったことがありますか?
解決策私はStanislavLの助けを借りて採用することになりました。このアルゴリズムは、の終わりから一度に1文字ずつ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;
}