package jdepend.framework.ui.component; import java.awt.Component; import javax.swing.BorderFactory; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.table.TableCellRenderer; public class MultiLineTableCellRender extends JTextArea implements TableCellRenderer { public JTable extTable = null; public MultiLineTableCellRender() { setLineWrap(true); setWrapStyleWord(true);// JTextArea自动换行的功能 this.setBorder(BorderFactory.createEmptyBorder(1, 1, 0, 0)); // 去掉jtextarea的默认边框,因为和JTable的表格线有重叠 } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // 计算当下行的最佳高度 // 计算了该行所有列的内容所对应的高度,挑选最高的那个 int maxPreferredHeight = 18; for (int i = 0; i < table.getColumnCount(); i++) { setText("" + table.getValueAt(row, i)); setSize(table.getColumnModel().getColumn(column).getWidth(), 0); maxPreferredHeight = Math.max(maxPreferredHeight, getPreferredSize().height); } if (table.getRowHeight(row) != maxPreferredHeight) { table.setRowHeight(row, maxPreferredHeight); } if (isSelected) { this.setBackground(table.getSelectionBackground()); } else { this.setBackground(table.getBackground()); } setText(value == null ? "" : value.toString()); return this; } }