# Popup Deluxe (Transparentes Popup)!



## KS (27. Jan 2006)

Ein fröhliches Hallo an alle interessierten!   

Ich möchte ein, so scheint es mir, visuelles Wunderwerk vollbringen! So siehts aus:

1. Wenn ich über ein Komponenten mit der Maus fahre, soll ein mehrzeiliges Popup/ToolTip Fenster erscheinen welches,
2. sich mit der Maus über dem Komponenten bewegt (natürlich ohne flackern) , bis die Maus den Komponenten verlässt und
3. währenddessen transparent ist!

Das ganze soll mir dazu dienen, informationen über Komponente anzuzeigen!

Ich hab mir mal Gedanken dazu gemacht, aber habe weder bei JPopup noch bei ToolTip befriedigung gefunden. Gibt es da noch andere geeignete Klassen oder muss ich hier nen Kopfstand machen?

Danke auch für Gedankenanstösse !!

Es Grüsst freundlich
Chris


----------



## Campino (27. Jan 2006)

ich denke du brauchst eine GlassPane...


----------



## Beni (27. Jan 2006)

Mehrzeilig: HTML verwenden

Du kannst getToolTipText( MouseEvent ) überschreiben um für verschiedene Regionen einer Component verschiedene Tooltips anzeigen zu lassen. Wenn sich die Maus von einer Region in die andere bewegt, wird der Tooltip automatisch folgen. Ist nicht ganz das Verhalten dass du beschrieben hast, aber zumindest ähnlich.


----------



## freez (27. Jan 2006)

Ich sehe es auch so wie campino ... ein Panel neben der Maus einblenden, welches nicht bestandteil deines Frames ist. Naja, das ist ne Idee, aber ob die so ohne weiteres realisierbar ist, kann ich nicht sagen. Und ob das ganze dann auch noch ruckelfrei läuft.

Ich könnte mir vorstellen, daß ein Thread vom Frame die Mausbewegung überwacht, und dann dieses neue Fenster dann neben der Maus positioniert. Vielleicht lässt sich das auch zusätzlich mit den Mausevent kombinieren. So in der Art, daß das Mausevent einer Komponente dem Thread sagt, daß die Maus jetzt in der Komponente ist, und wann sie wieder draussen ist. Somit könntest du deine Komponenten unterscheiden.


----------



## freez (27. Jan 2006)

Ein kleiner Denkanstoß: Bitte denke auch daran, daß dein Fenster evtl wichtige informationen verdeckt. Mich kotzt nix mehr an, wenn so eine Hilfe aufpoppt, welche ich schon hundert mal gesehen habe,  und nimmer weg geht. Naja, man kann ja schlecht hinter den Hilfetext schauen (obwohl manche meinen, sie könnten es, wenn man dann ihre Kopfbewegung beobachtet )


----------



## KS (27. Feb 2006)

ich habs geschafft! ich habe ein der maus folgendes popupmenu! transparent! OHNE FLACKERN!

aber ich hab ein anderes Problem.

Ich habe mir zusätzlich noch ein ähnliches popup gemacht. diese hat aber SLIDERs drauf. wenn ich nun an einem slider nörgele, dann hinterlässt dieser flecken im transparenten popup. wähh

 ???:L 

Nun, beim hin und her probieren kam ich darauf, dass die Fuktion setLocation() von Popup das ganze Popup schön anzeigt! Nun bewege ich, immer wenn ich den Mauszeiger vom SLIDER löse, das Fenster immer um ein Pixel hin und und beim nächsten Mausevent wieder zurück (NUR DATIM DAS GANZE SCHÖN AUSSIEHT!!

aber das kann es wohl nicht sein. alles was ich mit repaint(), revalidate(), super.paintComponent... versucht habe ging schief. ich brings nicht dazu schön auszusehen! kotz

PS Hier der Code, welcher ein tolles Popup generiert (Transparent, Maus-folgend)


```
private JPopupMenu popup = new JPopupMenu();

popup.setLabel("Info zur Buchung");	
			popup.setFocusable(false);
			taInfo = new JTextArea(" Buchung Nr.\t: " + rs.getString(1) + "\n " +
					   " Name         \t: " + rs.getString(2) + " " + rs.getString(3) + "\n " +
					   " Datum        \t: " + rs.getString(4) + " bis " + rs.getString(5) + "\n " +
					   " Anzahl Zimmer\t: " + rs.getString(6) + "\n " +
					   " Buchungstext \t: " + rs.getString(7) + "\n " +
			 		   " Gebucht von  \t: " + rs.getString(8) + " (" + rs.getString(9) + ")");
			
			taInfo.setBorder(null);
			taInfo.setFocusable(false);
			taInfo.setBackground(new Color(230,230,230,0));
			//taInfo.setForeground(new Color(0,0,0,0));
			popup.add(taInfo);
			popup.setBorder(BorderFactory.createEtchedBorder(new Color(145,20,190),new Color(0,0,0,150)));
			popup.setBackground(new Color(230,230,230,200));
			Point p = getPopupLocation(arg0.getComponent().getLocationOnScreen().x + arg0.getX(),arg0.getComponent().getLocationOnScreen().y + arg0.getY());
			popup.show(arg0.getComponent(),p.x - arg0.getComponent().getLocationOnScreen().x,p.y - arg0.getComponent().getLocationOnScreen().y);
```

kombiniert mit dem mouseMotionListiener:


```
public void mouseMoved(MouseEvent e) {
		int x = e.getComponent().getLocationOnScreen().x + e.getX();
		int y = e.getComponent().getLocationOnScreen().y + e.getY();
		popup.setLocation(getPopupLocation(x,y));
	}
```

//getPopupLocation ist eine Funktion, welche verhindert, dass das popup einen gwünschten Bereich nicht überlappt

und so sieht das ganze aus (der mauszeiger konnte ich irgendwie mit screenshot nicht erwischen):







das popup ist erstklassig! folgt immer dem Mauszeiger, wenn es über ein Zeitfeld kommt!

Aber schon mal danke, für tips mit meinem anderen Popup


----------



## KS (27. Feb 2006)

keine Antwort? Also vieleicht ist dieser thread zu unübersichtlich. Hier nochmal meine frage:

warum hat java (Swing) solche probleme mit dem korrekten anzeigen von transparenten objekten? gibt es keine einfache lösung eine gruppe von objekte transparent zu machen? ich suche nach einer methode wie die paintComponents, welche alle objekte neu zeichnet, transparent und OHNE FEHLER!

Hier ein Bild vom disaster:






ich habe gerade den slider "R" bewegt. Es ist deutlich zu sehen, dass dieser nun chaotisch gezeichnet wird!

danke an alle antworten!

gruss
chris


----------



## L-ectron-X (27. Feb 2006)

Ich kann mich erinnern, von so einem Problem schon einmal in diesem Forum gehört zu haben.


----------



## KS (27. Feb 2006)

hast du mir ein stichwort nachdem ich hier suchen kann. habe scho so lange geblättert... (vieleicht war ich dies auch selber?)   

thx
chris


----------

