Ich habe eine JTextArea, die ich als CellRenderer für eine Tabelle verwenden. Im getTableCellRenderercomponent
Methode, die ich habe:JTextArea als CellRenderer scheint nicht mit Wrap-Stil-Word zu arbeiten
setText(getTextForCell());
setSize(table.getColumnModel().getColumn(column).getWidth(), 0);
getUI().getRootView(textArea).setSize(textArea.getWidth(), 0f);
updateSize();
private void updateSize() {
int prefHeight = textArea.getPreferredSize().height;
int currHeight = table.getRowHeight(r);
if (prefHeight > currHeight) {
table.setRowHeight(row, prefHeight);
}
Wenn der Textbereich wrap Stil Wort verwendet, ist es manchmal eine Reihe kurz.
Wenn ich diese updateSize-Methode von außerhalb getTableCellRendererComponent
aufrufen, dann funktioniert es richtig. Aber bei einer großen Tabelle ist das Aufrufen der Aktualisierungsgröße in allen Zeilen immer dann, wenn sich eine Spaltengröße anpasst, nicht durchführbar, da sie zu langsam ist. Daher habe ich nach einer Möglichkeit gesucht, die Größe während des Zeilenrenderings zu ändern.
Es gibt einen verwandten Java-Bug (der als behoben markiert ist, aber es scheint nicht, dass es wirklich ist) http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4446522, aber diese Problemumgehung scheint nicht zu funktionieren, wenn Word-Wrap verwendet wird.
Kann jemand eine Alternative zur Verfügung stellen, wie man diese Arbeit richtig macht?
Warum nicht eine 'ListSelectionListener', die eine benachbarte Platte oder vielleicht füllt [' TablePopupEditor'] (http://stackoverflow.com/a/3591230/ 230513)? – trashgod
Ich bin mir nicht sicher, wie das hier relevant ist ... –
Alternative Möglichkeiten, verpackten Text in einer freundlicheren Komponente anzuzeigen. – trashgod