Dies ist eine alte Version des Dokuments!
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() { 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" }); this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER); 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.setBounds(0, 0, 400, 300); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); } } class TextAreaCellRenderer extends DefaultTableCellRenderer { private JTextArea area; public TextAreaCellRenderer() { 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; } }