# Variabler ToolTip-Text in JTable



## kaory (6. Okt 2004)

Hallo 

Ich möchte in meiner JTable einen ToolTipText anzeigen, der für jede Zeile (Zelle) variiert.
Die Daten für die ToolTip Anzeige sind in einem Array hinterlegt.

Ich nehme alle Editierungen (Schriftfarbe, Schriftart, etc.) in einem angepasstem DefaultTableCellRenderer vor.
Das klappt alles, nur der setToolTipText() nicht.

Kann mir jemand weiterhelfen?
Ich Danke Euch


----------



## Beni (6. Okt 2004)

Wie setzt du den ToolTip?

Also wenn ich mich recht erinnere müsste das doch so funktionieren (den CellRenderer des Tables etwas verändern)?

```
public class CellRenderer extends DefaultTableCellRenderer{
  public Component getTableCellRenderComponent( ... ){ // ok, du weisst schon welche Methode ich damit meine :-)

    setToolTipText( "Blabla" );
    return this;
  }
}
```


----------



## kaory (6. Okt 2004)

Beni hat gesagt.:
			
		

> Wie setzt du den ToolTip?
> 
> Also wenn ich mich recht erinnere müsste das doch so funktionieren (den CellRenderer des Tables etwas verändern)?
> 
> ...



hallo,

setToolTipText(toolTipText[row]);
toolTipText[] --> Array mit den Daten
row --> aktuelle Zeile der JTable


da ich noch das Array mit den Daten in den CellRenderer bekommen muss (die Daten selbst hole ich mir aus einer Datenbank) funktioniert mein Code so nicht.

Nun habe ich versucht  beim Aufruf noch ein String Array mit anzuhängen 
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column, String toolTip[])

das funktioniert aber auch nicht, ich bekomme nur den letzten Wert des Arrays als ToolTip für alle Zeilen angezeigt.

trotzdem schon mal vielen Dank für Deine Hilfe


----------



## Beni (6. Okt 2004)

Also: du kannst die Signatur von "getTableCellComponent" nicht verändern, weil sonst die Methode gar nicht aufgerufen wird.

Das kleine Prog unten zeigt jedenfalls, dass man für jede Zelle einen eigenen Tooltip setzen kann, an der JTable liegt es also nicht.

Also bleibt nur noch die Frage zu klären, wie du jeweils an die Tooltips der einzelnen Zeilen rankommst.

Und da musst du wohl irgendwie deine Datenbank mit dem Renderer verknüpfen, aber ich weiss ja nicht, wie du dein Progi aufgebaut hast.

Vielleicht kannst du sowas basteln?

```
public class Renderer extends...{
  private Datenbank db;
  public Renderer( Datenbank db ){
    this.db = db;
  }

  public Component getTableCellRendererComponent( ... ){

    setToolTipText( db.get... );
    return this;
  }
}
```


Tooltips funktionieren Zellenweise:

```
import java.awt.Component;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class Editor{
   public static void main( String[] args ){
      // Die Daten für das Table
      String[][] data = new String[][]{
            {"a", "b", "c", "d"},
            {"e", "f", "g", "h"},
            {"i", "j", "k", "l"}
      };
      
      // Die Column-Titles
      String[] title = new String[]{
            "A", "B", "C", "D"
      };
      
      // Das JTable initialisieren
      JTable table = new JTable( data, title );
      
      table.setDefaultRenderer( Object.class, new DefaultTableCellRenderer(){
      	/* (non-Javadoc)
		 * @see javax.swing.table.DefaultTableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
		 */
		public Component getTableCellRendererComponent(JTable table,
				Object value, boolean isSelected, boolean hasFocus, int row,
				int column) {

			super.getTableCellRendererComponent(table, value,
					isSelected, hasFocus, row, column);
			
			setToolTipText( value.toString() + " (das musst noch geschrieben werden)" );
			
			return this;
		}
      });
      
      JFrame frame = new JFrame( "Demo" );
      frame.getContentPane().add( new JScrollPane( table ) );
      frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
      frame.pack();
      frame.setVisible( true );
   }
}
```


----------



## Matflasch (1. Dez 2004)

Man kann auf einfache Art den ToolTip für jeden Zelle setzen:

Man erstellt sich einfach eine Klasse:


```
public class TableCell {
  private Object            Value                  = null;
  private String            ToolTipText            = null;
  private Color             foregroundColor        = null;
  private Color             backgroundColor        = null;
...
}
```

Da man dem TableCellRenderer ja ein Objekt übergeben kann, kann dies ein String sein, aber es kann auch das TableCell Objekt sein. Beim Packen der Daten packst du also alles jeweils in ein TableCell Objekt. Daraus machste dir dann das Objekt[][] was die Daten für die Table sind, oder per Vector, is ja egal.

Und den Renderer machste dann so in etwa...


```
public Component getTableCellRendererComponent(
        JTable Table,
        Object Value,
        boolean isSelected,
        boolean hasFocus,
        int Row,
        int Column) {

    TableCell tbc = (TableCell) Value;
		
    setText(tbc.getValue().toString());
    setToolTipText(tbc.getToolTipText());
...
    return this;
}
```

Mfg, Matflasch


----------



## Beni (1. Dez 2004)

Ich möchte ja nicht sagen, dass a) die Frage schon beantwortet war, und b) du hier Threads ausgräbst, die Monate alt sind :roll:


----------

