2009-06-17 3 views
1

Ich weiß, wie man ein Rechteck auf ein JPanel zeichnet, aber wie kann ich ein Rechteck auf den Bildschirm malen, so dass das Rechteck scheint zu schweben? Genauer gesagt, ein nicht gefülltes Rechteck. Mein Gedanke ist, einen transparenten JFrame mit einem Rechteck darauf zu verwenden; Dies macht jedoch den gesamten Inhalt im JFrame transparent.Floating Rectangle auf dem Bildschirm

Meine Lösung Also ich denke, es gibt viele Möglichkeiten, dies zu tun, einige komplexer als andere, einige praktischer als andere.

Ich habe den Startbildschirm versucht. Das Problem dabei ist, dass Sie beim Ausführen die VM-Parameter "-splash" übergeben müssen. Ich habe eine Manifest-Datei erstellt, um dies zu automatisieren/die Parameter in Eclipse zu setzen; Aber dann hängt der Code von der GIF-Datei ab und ich kann die Größe/Position des Rechtecks ​​nicht einfach ändern. Ähnliche Probleme treten auf, wenn Sie es über Bildschirm-Screenshot fälschen. Gute Vorschläge, aber ich habe ziemlich coole Sachen gelernt.

Also, zurück zu dem, was ich getan habe. Ich habe einen JFrame verwendet, den Inhaltsbereich aufgerufen und den Hintergrund auf Rot gesetzt (egal welche Farbe) und dann den Rahmen undekoriert setzen, der die Titelleiste und den Rand des Fensters entfernt. Dies erzeugte ein schwebendes Rechteck, das die Größe und Position von (frame.setSize, .setLocation) leicht ändern konnte. Ich habe es noch zu einem nicht gefüllten Rechteck gemacht, ich habe interne Frames und Layeredpanes ausprobiert, aber keinen Erfolg.

+0

j6 hat einen Begrüßungsbildschirm api http://java.sun.com/developer/ Technische Artikel/J2SE/Desktop/javase6/Splashscreen / –

Antwort

0

Sie müssten wahrscheinlich Teile des Fensters transparent haben, während das tatsächlich gezeichnete Rechteck dies nicht ist. Ich bezweifle, dass es dafür eine Plattform-agnostische Lösung gibt, so dass Sie hierfür auf JNI zurückgreifen müssen. Je nachdem, was Sie tun müssen, ist es auch gut, das Fenster für Klicks unsichtbar zu machen, die auch andere Tricks benötigen.

0

https://github.com/twall/jna/

Das Projekt Bibliothek bietet und hat Beispiele für eine Uhr und Infos Ballons, die halbtransparent sind und überschreiten auch das, was Sie zu tun versuchen. Die Demos funktionieren gut unter Windows, aber ich kann nicht sagen, wie plattformübergreifend sie sind.

1

JFrame ist eine schwergewichtige Komponente, und diese waren immer am längsten undurchsichtig. Da jedoch Java 6u10 gibt ein inofficial API für transparente Fenster in der Klasse ist com.sun.awt.AWTUtilities, die höchstwahrscheinlich offiziell in Java 7. In früheren Versionen werden wird, ist der einzige Weg, um diese Art der Sache zu simulieren fake it via screenshots mit java.awt.Robot genommen war

0

Sie möchten vielleicht JLayeredPane betrachten. Die Demo auf dieser Seite zeigt teilweise, was Sie wollen, aber wenn Ihr Rechteck malen Sie Ihre Farbe auf transparent setzen müssen:

AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f); 
g2d.setComposite(ac); 
g2d.drawImage(image, x, y, this);