Hallöchen,
selbst bei simpelster Testprogrammierung krieg ich es irgendwie nicht hin, dass ich für einen JTable einen selbst implementierten Renderer zuweisen kann (den brauch ich, weil ich bei den TableCells bei langen Einträgen gern einen Zeilenumbruch hätte).
Der Code sieht wie folgt aus:
Und dann noch der Renderer dazu:
Dementsprechend sollte der Tabelleneintrag "b2" umgebrochen werden, ich bekomme aber nur:

Andere Sachen funktionieren auch nicht, z.B. wenn ich im Renderer eine andere Hintergrundfarbe angebe oder so.
Steh grad echt auf dem Schlauch und wäre für Hilfe sehr dankbar
. Die einzige minimale Vermutung, die ich habe, wäre, dass die Class, die man als ersten Parameter für table.setDefaultRenderer angibt, falsch ist. Hab mal String genommen, weil die Tabelle ja Strings verwaltet.
Grüße Michi
selbst bei simpelster Testprogrammierung krieg ich es irgendwie nicht hin, dass ich für einen JTable einen selbst implementierten Renderer zuweisen kann (den brauch ich, weil ich bei den TableCells bei langen Einträgen gern einen Zeilenumbruch hätte).
Der Code sieht wie folgt aus:
Java:
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JTable;
public class Test extends JFrame
{
public static void main(String[] args)
{
new Test();
}
public Test()
{
Container container = getContentPane();
String[] header = new String[] {"Row No 1", "Row No 2" , "Row No 3"};
String[][] content = new String[][] {
{"a1", "a2", "a3"},
{"b1", "b2 sdf sdf sdf sdf", "b3"},
{"c1", "c2", "c3"},
{"d1", "d2", "d3"}};
JTable table = new JTable(content, header);
table.setDefaultRenderer(String.class, new LineWrapCellRenderer());
container.add(table);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
}
Und dann noch der Renderer dazu:
Java:
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.TableCellRenderer;
public class LineWrapCellRenderer extends JTextArea implements TableCellRenderer
{
private static final long serialVersionUID = 1L;
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column)
{
// setLineWrap
this.setText((String)value);
this.setWrapStyleWord(true);
this.setLineWrap(true);
// make sure cell is high enough
int fontHeight = this.getFontMetrics(this.getFont()).getHeight();
int textLength = this.getText().length();
int lines = textLength / this.getColumns() +1;
int height = fontHeight * lines;
int maxHeight = Math.max(table.getRowHeight(row), height);
table.setRowHeight(row, maxHeight);
return this;
}
}
Dementsprechend sollte der Tabelleneintrag "b2" umgebrochen werden, ich bekomme aber nur:

Andere Sachen funktionieren auch nicht, z.B. wenn ich im Renderer eine andere Hintergrundfarbe angebe oder so.
Steh grad echt auf dem Schlauch und wäre für Hilfe sehr dankbar
Grüße Michi