ToolTip in JTable-Zelle bei zuviel Inhalt

MasterEvil

Erfahrenes Mitglied
Hiho, ich habe eine JTable und möchte gerne ein ToolTip anzeigen lassen wenn der Inhalt der Zelle nicht komplett dargestellt werden kann.
Bisher hab ich das ziemlich blöd gelöst und hab eine bestimmte Länge angegeben ab der ein ToolTip angezeigt wird.

Meine Überlegung war jetzt die das ich setToolTipText() dann anwende wenn auch der Text in der Zelle beschnitten wird (die 3 Punkte).
Das wird ja irgendwo schon von der Komponente automatisch gemacht, mein problem ist nur wo oO
Hab jetzt glaube 2 Stunden bei sun rumgekramt aber nix gefunden, vieleicht kann mir ja einer sagen in welcher Funktion das geschieht oder vieleicht hat ja auch jemand ne andere Lösung?

Besten Dank schonmal im Voraus :)
 
Hallo,

weiß nicht ob das eine gute Lösung ist, scheint aber zumindest zu funktionieren.

Java:
import java.awt.BorderLayout;
import java.awt.Component;
import java.math.BigInteger;

import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;

public class TableNTooltipExample extends JFrame {

	private JQTable table = new JQTable();

	public TableNTooltipExample() {
		super("Table and Tooltip Example");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setAlwaysOnTop(true);
		this.setLocationByPlatform(true);

		table.setModel(new QuadratTableModelSimple());

		this.add(new JScrollPane(table), BorderLayout.CENTER);

		this.pack();
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new TableNTooltipExample();
	}

	class JQTable extends JTable {
		private char[] chars;

		private int length;

		private Component c;

		private JComponent jc;

		public Component prepareRenderer(TableCellRenderer renderer,
				int rowIndex, int vColIndex) {
			c = super.prepareRenderer(renderer, rowIndex, vColIndex);
			if (c instanceof JComponent) {
				jc = (JComponent) c;
				chars = this.getValueAt(rowIndex, vColIndex).toString()
						.toCharArray();
				length = jc.getFontMetrics(jc.getFont()).charsWidth(chars, 0,
						chars.length);
				if (this.getColumnModel().getColumn(vColIndex).getWidth() < length)
					jc.setToolTipText(this.getValueAt(rowIndex, vColIndex)
							.toString());
				else
					jc.setToolTipText(null);
			}
			return c;
		}
	}

	class QuadratTableModelSimple extends AbstractTableModel {
		public int getRowCount() {
			return 10;
		}

		public int getColumnCount() {
			return 10;
		}

		public Object getValueAt(int row, int col) {
			return new BigInteger("" + row).pow(col);
		}

		public String getColumnName(int column) {
			return "Spalte" + column;
		}
	}
}


Vg Erdal
 
So gehts natürlich auch :)
Besten Dank, habs in meinen CellRenderer übernommen und funktioniert tadellos :)
 
Zurück