JTable mehrzeilig

ElJarno

Mitglied
Hi Leute,
möchte gerne Inhalte in de JTable mehrzeilig anzeigen. Habs derzeit so gelöst , dass ihc im Renderes aus dem Text HTML-Code genriere. Jeodch besteht, das Problem das ich die Anpassung der Zeilenhöhe nicht richtig hinbekomme. Hier mal der Renderer:
Code:
class RendererTableMeldungen extends DefaultTableCellRenderer {
	private static final long serialVersionUID = 1L;

	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
				row, column);
		int indexMeldung = table.getColumnModel().getColumnIndex("Meldung");
		if (column == indexMeldung) {
			int colWidth = table.getColumnModel().getColumn(indexMeldung)
					.getWidth();
			String text = value.toString();
			double maxLineSize = (colWidth / 10);
			StringBuffer strb = new StringBuffer();
			for (String textZeile : text.split("\n")) {
				strb.append(textZeile + "<br>");
			}
			setVerticalAlignment(JLabel.TOP);
			setText("<html>" + strb.toString() + "<html>");
			Dimension dim = getPreferredSize();
			if (text.length() > maxLineSize) {
				int rowHeight = ((int) (dim.getWidth() / colWidth)) * 14 + 14;
				if (rowHeight < 30)
					rowHeight = 30;
				table.setRowHeight(row, rowHeight);
			}
		}
		return this;
	}
}

Gruß Jan
 
Wie wäre es mit einem eigenen CellRenderer?

z.B.:
Java:
public class RendererTableMeldungen
  extends JTextArea implements TableCellRenderer

Wichtig ist hier die Ableitung von einer JTextArea, welche den Zeilenumbruch unterstützt.
 
ja gut habs hinbekommen, aber wie setzte ich jetzt die spaltenhöhe neu? und wo?
Code:
public class RendererTableMeldungen2 extends JTextArea implements
		TableCellRenderer {
	public RendererTableMeldungen2() {
		super();
		this.setEditable(false);
		this.setLineWrap(true);
		this.setWrapStyleWord(true);
	}

	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		this.setText(value.toString());
		return this;
	}
}
Gruß Jan
 
Hab mal sowas hier gebastelt:
Code:
		this.tableMeldungen.addComponentListener(new ComponentListener() {
			public void componentShown(ComponentEvent e) {
			}

			@Override
			public void componentResized(ComponentEvent e) {
				for (int i = 0; i < tableMeldungen.getRowCount(); i++) {
					RendererTableMeldungen2 renderer = (RendererTableMeldungen2) tableMeldungen
							.getCellRenderer(i, 2);
					int rowCount = renderer.getRows();
					tableMeldungen.setRowHeight(i, rowCount * 15);
				}
			}

			@Override
			public void componentMoved(ComponentEvent e) {
			}

			@Override
			public void componentHidden(ComponentEvent e) {
			}
		});

Jedoch kann die Zeilenzahl weder durch getRow() noch durch getLineCount ermittelt werden.
 
Zurück