Wie lässt sich ein teiltransparentes JPanel erzeugen?

Ein JPanel kann durch die Methode JComponent#setOpaque() entweder opak oder volltransparent gesetzt werden. Möchte man ein teiltransparentes JPanel erzeugen, so gelingt dies durch Erweitern der Klasse und Überschreiben von paintComponent().

Das Beispiel zeigt ein einfaches Fenster auf Basis eines JFrame, in dem zwei teiltransparente Panel geladen werden. Zur Darstellung der Stärke der Transparenz besitzen die Container farbige Hintergründe und zeigen einfache Texte.

Die Zuweisung neuer Farben ist der Weg, die gewünschte Teiltransparenz zu erreichen. Die Klasse Color besitzt Konstruktoren, die neben den Farbwerten auch einen Alpha-Wert entgegennehmen. Der Austausch der ursprünglichen opaken Hintergrundfarbe gegen eine transparente führt zum gewünschten Ziel.

Im Konstruktor der Klasse TransparentPanel wird die Methode initGUI() aufgerufen, die das Fenster der Klasse mit seinen GUI-Elementen erzeugt. Nach dem Setzen der Fenstergröße werden dort zwei Objekte vom Typ TPanel erstellt. Die Klasse ist von JPanel abgeleitet und überschreibt lediglich paintComponent(). Dort wird die Erscheinung der Panel-Objekte durch eine Reihe von Parametern gesteuert, deren Werte dem Konstruktor übergeben und in paintComponent() ausgewertet werden. Zu diesen Parametern zählen jeweils zwei Color-Objekte für die Vorder- und Hintergrundfarbe, die ihrerseits vier float-Parameter besitzen. Der letzte definiert hierbei einen Alphawert zwischen 0 und 1. Ein Wert von 0 bezeichnet dabei die volle Transparenz, 1 die vollständige Opazität.
Alle Parameter werden bei der Objektbildung im Konstruktor der Klasse TPanel an Instanzvariablen übergeben und dann in paintComponent() ausgewertet.
Für die Darstellung der Panel-Objekte auf dem Frame ist es unabdingbar, deren Erscheinungsgröße festzulegen, da ein leeres Panel andernfalls kollabieren würde und so nicht sichtbar wäre. Dies geschieht in initGUI() durch den Aufruf der drei Methoden setPreferredSize(), setMinimumSize() und setSize().

Innerhalb paintComponent() wird zunächst die gleichnamige Methode der Superklasse JPanel aufgerufen, um deren ordnungsgemäße Ausführung sicherzustellen. Dem Graphics-Objekt der Methode werden die teiltransparenten Farben durch Graphics#setColor() übergeben und die Größen der Hintergrundrechtecke berechnet. Nach dem Zeichnen der Fläche wird der Text in der Vordergrundfarbe erzeugt und in einer Schleife mehrfach untereinander gesetzt.

Die Methode paintComponent() wird jedes Mal, wenn das Fenster mit seinen Inhalten neu gezeichnet wird aufgerufen, also bei der erstmaligen Darstellung und bei jeder Größenänderung, sodass die in ihr enthaltenen Routinen jedes Mal erneut ausgeführt werden.

In initGUI() werden beide TPanel-Objekte durch ein GridBagLayout im Fenster an die gleiche Position gesetzt, sodass die Teiltransparenz anhand der Mischung der Farben und durch die Überdeckung der Schriften augenfällig wird.

Teiltransparentes Fenster