Dies ist eine alte Version des Dokuments!


Java - AWT/Swing

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;
   }
}

Eigene Werkzeuge
Werkzeuge

gratis Counter by GOWEB
seit 9.10.2007