import java.awt.BorderLayout;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
public class TextAreaRendererDemo extends JFrame {
public TextAreaRendererDemo() {
JTable table = new JTable(new Object[][] {
{"test", "Zeile 1 von 4 \nZeile 2 von 4 \nZeile 3 von 4 \nZeile 4 von 4" },
{"test", "Zeile 1 von 2 \nZeile 2 von 2"},
{ "test", "aaaaaaaaaa bbbbbbbbbb cccccccccc eeeeeeeeee ffffffffff" } },
new String[] { "0", "1" });
this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
table.getColumnModel().getColumn(1).setCellRenderer(new TextAreaRenderer());
for (int i=0; i<table.getRowCount(); i++) {
TableCellRenderer renderer = table.getCellRenderer(i, 1);
Component comp = table.prepareRenderer(renderer, i, 1);
table.setRowHeight(i, comp.getPreferredSize().height);
}
}
class TextAreaRenderer extends DefaultTableCellRenderer {
private JTextArea area;
public TextAreaRenderer() {
area = new JTextArea();
area.setLineWrap(true);
area.setWrapStyleWord(true);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
area.setText(value.toString());
area.setForeground(c.getForeground());
area.setBackground(c.getBackground());
return area;
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
final JFrame frame = new TextAreaRendererDemo();
frame.setBounds(0, 0, 500, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}