Hallo!
Seit gestern suche ich für das folgende Problem eine Lösung, habe aber bisher keine
gefunden. Vielleicht wisst ihr weiter.
Zunächst erzeuge ich in meinem Programm eine JTable mit der Bezeichnung table und setze anschließend für jede Spalte einen TableCellRenderer. Dadurch soll erreicht werden, dass die Zeilen in den ersten BEIDEN SPALTEN umgebrochen werden:
Der TableCellRenderer ist wie folgt implementiert:
Das Problem ist nun, dass permanent setRowHeight aufgerufen wird, da die CellRenderer der ersten beiden Spalten ständig ein repaint hervorrufen und sich gegenseitig beeinflussen. Das Problem kann man dadurch beseitigen, dass man den TARenderer ändert und folgende Abfrage setzt:
Das hat jedoch den Nachteil, dass sich die Zeilenhöhe nicht mehr reduziert wird.
Nun hab ich mir gedacht, dass man eine weitere Abfrage einfügt, wobei ein Parameter für die Mindeshöhe height bestimmt werden muss:
height bezeichnet dabei das Minimum über alle "Zellenhöhen" der betrachteten Zeile row.
Jedoch habe ich keine Ahnung, wie ich diese ermitteln kann.
Vielleicht gibt es ja auch eine Alternativlösung! Ich möchte nur erreichen, dass der Text in den ersten beiden Spalten einer JTable umgebrochen wird!
Gruß!
Seit gestern suche ich für das folgende Problem eine Lösung, habe aber bisher keine
gefunden. Vielleicht wisst ihr weiter.
Zunächst erzeuge ich in meinem Programm eine JTable mit der Bezeichnung table und setze anschließend für jede Spalte einen TableCellRenderer. Dadurch soll erreicht werden, dass die Zeilen in den ersten BEIDEN SPALTEN umgebrochen werden:
Java:
TARenderer tar = new TARenderer();
table.getColumnModel().getColumn(0).setCellRenderer(tar);
table.getColumnModel().getColumn(1).setCellRenderer(tar);
Der TableCellRenderer ist wie folgt implementiert:
Java:
public class TARenderer extends JTextArea implements TableCellRenderer
{
public TARenderer()
{
super();
setLineWrap(true);
setWrapStyleWord(true);
}
public Component getTableCellRendererComponent(JTable table, Object obj,
boolean isSelected, boolean hasFocus, int row, int column)
{
setText((String) obj);
setSize(table.getColumnModel().getColumn(column).getWidth(), getPreferredSize().height);
if(table.getRowHeight(row) != getPreferredSize().height)
table.setRowHeight(row, getPreferredSize().height);
return this;
}
}
Das Problem ist nun, dass permanent setRowHeight aufgerufen wird, da die CellRenderer der ersten beiden Spalten ständig ein repaint hervorrufen und sich gegenseitig beeinflussen. Das Problem kann man dadurch beseitigen, dass man den TARenderer ändert und folgende Abfrage setzt:
Java:
if(table.getRowHeight(row) < getPreferredSize().height)
table.setRowHeight(row, getPreferredSize().height);
Nun hab ich mir gedacht, dass man eine weitere Abfrage einfügt, wobei ein Parameter für die Mindeshöhe height bestimmt werden muss:
Java:
if(table.getRowHeight(row) > getPreferredSize().height && getPreferredSize().height > height)
table.setRowHeight(row, getPreferredSize().height);
Jedoch habe ich keine Ahnung, wie ich diese ermitteln kann.
Vielleicht gibt es ja auch eine Alternativlösung! Ich möchte nur erreichen, dass der Text in den ersten beiden Spalten einer JTable umgebrochen wird!
Gruß!
Zuletzt bearbeitet: