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() {
      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;
   }
}

Eigene Werkzeuge
Werkzeuge

gratis Counter by GOWEB
seit 9.10.2007