JTable, Zeilenhöhe berechnen aus Textinhalt
javax.swing.JTable
Im folgenden Bespiel bestimmt der Textinhalt die Zeilenhöhe.
Dazu wird eine JTextArea als CellRenderer verwendet:
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; import java.awt.BorderLayout; import java.awt.Component; public class TextAreaRendererDemo extends JFrame { public TextAreaRendererDemo() { setSize(0, 0, 400, 300); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTable table = new JTable(new Object[][] { {"Zeile 1 von 1", "Zeile 1 von 3 \nZeile 2 von 3 \nZeile 3 von 3"}, {"Zeile 1 von 2 \nZeile 2 von 2", "Zeile 1 von 2 \nZeile 2 von 2"}, }, new String[] { "0", "1" }); getContentPane().add(new JScrollPane(table)); table.getColumnModel().getColumn(1).setCellRenderer(new TextAreaCellRenderer()); 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); } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { final JFrame frame = new TextAreaRendererDemo(); frame.setVisible(true); } }); } } public class TextAreaCellRenderer extends DefaultTableCellRenderer { private JTextArea textArea; public TextAreaCellRenderer() { textArea = new JTextArea(); textArea.setLineWrap(true); textArea.setWrapStyleWord(true); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); textArea.setText(value.toString()); textArea.setForeground(component.getForeground()); textArea.setBackground(component.getBackground()); return textArea; } }