# Tooltip / neues Fenster



## Mayday (18. Nov 2003)

Hallo Gemeinde,

ich bin total neu hier und hoffe ich bekomme vielleicht Hilfe.
Ich habe eine kleine Applikation geschrieben, die in einem Canvas-Panel ein paar rechteckige Balken zeichnet. Das hab ich ganz simpel gemacht:

g.fillRect ( var1, 70, var2, 36 );

Danach schreibe ich in jeden Balken folgendes:

g.drawString ( [eineUhrzeit], var1, 80 );
g.drawString ( [eineUhrzeit], var1+var2, 100 );
g.drawString ( [einText], var1+var2/2, 90 );

Also 2 Uhrzeiten (eine links oben und die andere rechts unten) sowie ein Text in die Mitte des Balkens.

Schritt1:
Nun hätte ich gerne, daß wenn ich mit dem Mauszeiger über einen Balken fahre der Text und die Uhrzeiten als Tooltip angezeigt werden.

Schritt2:
Wenn ich nun den Balken doppelt anklicke soll ein neues Fenster aufgehen, welches Datenfelder enthält, die mit den Daten des Balkens gefüllt sind.
Wie mach ich das neue Fenster beim Doppelklick?

Ich weiß, für viele sicher total einfache Fragen ... aber jeder fängt mal klein an ...   

Gruß und Dank, Max


----------



## Ebenius (18. Nov 2003)

@ToolTip: Ich bin nicht der AWT-Profi, habe aber täglich mit Swing zu tun. Ich habe keine ToolTip implementierung in AWT gefunden. Muss es AWT sein oder wäre auch Swing okay. Dort ist das mit den ToolTips wirklich trivial.

@Doppel-Click auf componente -> neues Fenster: Mir fallen auf Anhieb zwei Wege ein. 

* MouseListener auf die componente (den Canvas) oder
* processMouseEvent() - Methode überschreiben (Canvas)

Ebenius


----------



## Mayday (19. Nov 2003)

hm ... also mein _Canvas extends JPanel_ ... heißt das nicht sowieso, daß es Swing ist?   

wie meinst Du das genau mit den Mouse-Ereignissen?
Wie geb ich denn dann an, daß er nur beim Click auf den Balken und nicht überall ein neues Fenster aufmachen soll?
Hat jemand für mich ein kleines Beispiel?


----------



## Mayday (19. Nov 2003)

Es wäre wirklich dringend, da ich das für eine Studienarbeit brauche.
Ich wäre euch sehr dankbar wenn ich Hilfe bekäme ...


----------



## Ebenius (19. Nov 2003)

Die Listeners fügst Du Komponenten hinzu und bekommst dann auch nur Events die auf diese Komponenten zutreffen.

*Über Event Listeners in Swing:*
http://java.sun.com/docs/books/tutorial/uiswing/events/index.html

Du hattest _Canvas_ geschrieben und ich ging davon aus, dass es AWT ist, weil es im AWT einen Canvas gibt. Im Swing kannst Du den Komponenten ToolTipTexts geben (wenn es nur Text ist) oder auch speziellere ToolTips (letzteres ist aber ein bisschen aufwändiger).

*Über ToolTips:*
http://java.sun.com/docs/books/tutorial/uiswing/components/tooltip.html

Schau mal in die Links, die sollten helfen.

Ebenius


----------



## Mayday (20. Nov 2003)

Erstmal danke für Deine (einsame) Hilfe!

*Wegen den ToolTips:*
Das ist was ich befürchtet habe, einem Objekt ein ToolTipText hinzuzufügen ist kein Problem, was aber mach ich mit meinem Rechteck, das ich gezeichnet habe? Das ist ja kein Objekt. Kann ich daraus ein Objekt machen oder kann ich statt einem Objekt auch ein Bereich angeben?


----------



## Ebenius (20. Nov 2003)

Sorry. Ich hatte ein wenig flüchtig gelesen und gedacht, dass je Balken eine Komponente vorhanden ist. 

Wenn Du verschiedene unterschiedliche Ereignisse pro Balken einzeln handeln willst (InputEvents, ToolTips, etc...), empfielt es sich, je Balken eine Komponente zu haben. Dies macht vieles einfacher, da diese Unterscheidung einer der Gründe für die Existenz von Komponenten ist.

Du kannst natürlich trotzdem die ToolTips vom Inhalt abhängig machen. Wenn Du das willst, schau Dir mal den Snippet an:

```
public class ToolTipPanel extends JPanel
{
	public ToolTipPanel()
	{
		setToolTipText("Never shown but set to non-null to enable tool tips...");
	}

	public String getToolTipText(MouseEvent event)
	{
		/* Build ToolTipText depending on mouse position */
		return "The mouse is in the " //
		+ (event.getY() <= getHeight() / 2 ? "upper" : "lower") //
		+" half of the component.";
	}
}
```

Sollte Dein Problem lösen, Richtig?

Grüße Ebenius.


----------

