AWT Shaped, Translucent Windows

OasisCritter

Bekanntes Mitglied
Hey,

ich bin vor kurzem auf dieses Thema aufmerksam geworden:

How to Create Translucent and Shaped Windows

Leider konnte ich es bis jetzt noch nicht anwenden, weil ich die
Code:
com.sun.awt.AWTUtilities class
nicht finde.

Im Beitrag steht man muss die "Java reflection API" benutzen. Ich find die Methoden einfach nicht. JDK ist installiert, fehlt mir sonst noch irgendwas?


MfG
 

eRaaaa

Top Contributor
Im Beitrag steht man muss die "Java reflection API" benutzen. Ich find die Methoden einfach nicht.

Mhm? Steht doch auch im Beitrag
Note that all the examples from this article that use the AWTUtilities class should be implemented via Java Reflection API.
Beispiel:
Java:
try {
   Class<?> awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities");
   Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class);
   mSetWindowOpacity.invoke(null, window, Float.valueOf(0.75f));
} catch (NoSuchMethodException ex) {
   ex.printStackTrace();
} catch (SecurityException ex) {
   ex.printStackTrace();
} catch (ClassNotFoundException ex) {
   ex.printStackTrace();
} catch (IllegalAccessException ex) {
   ex.printStackTrace();
} catch (IllegalArgumentException ex) {
   ex.printStackTrace();
} catch (InvocationTargetException ex) {
   ex.printStackTrace();
}

Oder was ist jetzt genau dein Problem? ;/
 
T

Tomate_Salat

Gast
Habe ich auch im Eclipse: Lösung:
Rechtsklick aufs Projekt -> Properties -> Java Build Path:
Da steht bei mir standartmäßig: [c]JRE System Library[JavaSE-1.6][/c]
diese auswählen und rechts auf [REMOVE] drücken.
danach auf:
Add Library... -> JRE System Library -> [Next]
dort wählst du den punkt: Workspace default JRE (jre6) aus und klickst auf [Finish]



dann kannst kannst du AWTUtilities so verwenden:
Java:
final JFrame frame          = new JFrame("test");
        
        AWTUtilities.setWindowOpaque(frame, true);
        AWTUtilities.setWindowOpacity(frame, 0.4F);
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel            = new JPanel();
        panel.setLayout(null);
        
        JButton button          = new JButton("hallo");
        button.setLocation(10, 10);
        button.setSize(100, 20);
        
        panel.add(button);
        frame.add(panel);
        frame.setSize(300, 300);
 
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                frame.setVisible(true);
            }
        });

MFG

Tomate_Salat
 

OasisCritter

Bekanntes Mitglied
Cool, das funktioniert :applaus: . Hast du viell. auch ein Beispiel dafür, dass das Frame und die Componenten jeweils in einem verschiedenen Unsichtbarkeitsgrad sind?

BTW: auch an eRaaa ein Danke, auch wenn ich nicht weis was du da gepostet hast xD

MfG
 

air_canada

Mitglied
Hast du viell. auch ein Beispiel dafür, dass das Frame und die Componenten jeweils in einem verschiedenen Unsichtbarkeitsgrad sind?

Zum Thema translucent and shaped windows habe ich mal ein kleines Tutorial geschrieben: Tutorials bei Impressive Artworx Soweit ich weiss ist es nicht möglich die Opacity einer einzelnen Komponente innerhalb eines Frames zu verändern ausser Du überschreibst dessen paintComponents()-Methode und zeichnest die Komponente selbst.
 

OasisCritter

Bekanntes Mitglied
Kannst du dir das nochmal kurz anschauen Tomate_Salat.

In meinem Beispiel, wird der JLabel-Hintergrund angezeigt:

Java:
package vok.ui;

import java.awt.Dimension;
import java.awt.Toolkit;

import javax.swing.JLabel;
import javax.swing.JPanel;

import vok.control.controller;

import com.sun.awt.AWTUtilities;
 
public class TransFrame extends MyFrame{
 
	Dimension screenSize=null;
	
	private int x;
	private int y;
	private int width;
	private int height;
	private JLabel show=null;
	
	public TransFrame(controller control) {
		super(control);
		initialize();
		setFrameContents();
	}
	@Override
	public void initialize() {
		if(screenSize==null) {
			screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		}

		
        x= getControl().getWindow().getX();
        y= getControl().getWindow().getY();
        width=getControl().getWindow().getWidth();
        height=70;
	}
	@Override
	public void setFrameContents() {
		  this.setAlwaysOnTop(true);
	        this.setLayout(null);
	        this.setSize(screenSize);
	        this.setUndecorated(true);
	        
	        JPanel panel    = new JPanel();
	        show= new JLabel();
	        
	        panel.setSize(width, height);
            panel.setLocation(x, y);
	        panel.add(show);
	        
	        this.add(panel);
	        AWTUtilities.setWindowOpaque(this, false);
	}
	
	public void show(String arg0) {
		setPanelPos();
		show.setText(arg0);
		show.repaint();
	}
	
	private void setPanelPos() {
		initialize();
		show.setLocation(x, y);
	}
}

trans29e0e8f0PNG.png


Und die Position des Labels lässt sich auch nicht wie oben bestimmen??

Wenn ich aber in deinem Beispiel, einfach ein JLabel ohne Variable hinzufüge funktioniert es:

Java:
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import com.sun.awt.AWTUtilities;
 
public class KSKB {
 
    public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.setAlwaysOnTop(true);
        frame.setLayout(null);
        frame.setSize(500, 500);
        frame.setUndecorated(true);
        JPanel panel    = new JPanel()
        {
            @Override
            protected void paintComponent(Graphics g)
            {
                Graphics2D g2d  = (Graphics2D) g.create();
                
                BasicStroke bs  = new BasicStroke(5.F, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL);              
                
                g2d.setStroke(bs);
                
                g2d.setColor(Color.BLUE);
                g2d.drawLine(0, 0, 100, 100);
                g2d.drawLine(100, 100, 200, 50);
                g2d.dispose();
            }
        };       
        
        panel.setBounds(100, 100, 200, 200);
        panel.setLayout(new BorderLayout());
        /*
         * Hier das JLabel
         */
        panel.add(new JLabel("<html><body><font size=\"5\" color=\"red\">Hallo</font></body></html>"), BorderLayout.NORTH);
        
        frame.add(panel);
        AWTUtilities.setWindowOpaque(frame, false);
        SwingUtilities.invokeLater(new Runnable()
        {
            
            @Override
            public void run()
            {
                frame.setVisible(true);
            }
        });        
    }
 
}

trans23a71e3dePNG.png
 
T

Tomate_Salat

Gast
Doch stimmt: dir wird der JPanel Hintergrund gezeigt ;-)
 
Zuletzt bearbeitet von einem Moderator:

eRaaaa

Top Contributor
Ich vermute weil du eben NICHT das JPanel, bzw deren paintComponent-Methode überschreibst!
Wenn du in dem Beispiel von Tomate in der paintComponent den super-Aufruf rein tun würdest (super.paintComponent(g); ) würde dies genau so mit Hintergrund dargestellt werden. D.h. also, überschreibe bei deinem Panel die paintComponent!
 
T

Tomate_Salat

Gast
weil ich in meinem Beispiel die paintComponent überschreibe...was du nicht tust. Der Zeichnet ja das JPanel und das hat std-mäßig nunmal einen Grauen Hintergrund
 

OasisCritter

Bekanntes Mitglied
Etwa so? Der graue Hintergrund bleibt...bzw. lässt sich die position des Labels auch nicht bestimmen, obwohl das Layout null ist. Die Variablen x und y werden korrekt berechnet.

Java:
    show= new JLabel() {
	        	/**
				 * 
				 */
				private static final long serialVersionUID = -1899521316317103266L;

				@Override
	        	protected void paintComponent(Graphics g) {
					       
	        	}
	        };
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
GUI-Programmer Translucent JFrame mit System-LookAndFeel AWT, Swing, JavaFX & SWT 4
MiMa JavaFX JAR unter Windows ausführen schlägt fehl? AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
T Swing DPI-Skalierung und Java 2D unter Java 11 (und Windows 10) AWT, Swing, JavaFX & SWT 2
L Swing Panels bewegen wie Windows 10 Kacheln AWT, Swing, JavaFX & SWT 0
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
M Swing Code funktioniert auf Windows aber nicht Linux... AWT, Swing, JavaFX & SWT 3
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
S Java Swing auf Windows Phone AWT, Swing, JavaFX & SWT 6
M Swing JComboBox mit Laufwerksbuchstaben (Windows) AWT, Swing, JavaFX & SWT 6
K JPanel Bilder bei Windows nicht darstellbar AWT, Swing, JavaFX & SWT 6
Ghostman1711 GUI Java von Klasse mit Application Windows anderes Application Window aufrufen AWT, Swing, JavaFX & SWT 6
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
Avarion Swing JFrame unter Windows 10 kleiner ?! AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Windows Blue-Screen nach anzeigen eines Bildes in Java AWT, Swing, JavaFX & SWT 10
S Swing Automatisch 2px Rahmen in Windows 8 AWT, Swing, JavaFX & SWT 0
A Swing JProgressbar im Windows Look & Feel Farbanpassung AWT, Swing, JavaFX & SWT 2
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
W Windows Fenster in einem Programm AWT, Swing, JavaFX & SWT 2
morphesus AWT Windows 7 Aero Look AWT, Swing, JavaFX & SWT 2
H Fenstergröße bei Mac und Windows gleich einstellen? AWT, Swing, JavaFX & SWT 3
R Problem mit TrayIcon unter Windows/Linux AWT, Swing, JavaFX & SWT 7
B Windows Look and Feel AWT, Swing, JavaFX & SWT 2
S Swing TrayIcon bei Systemdienst (Windows, Systemuser) AWT, Swing, JavaFX & SWT 7
N Swing JTree TreePath zu Windows Pfad? AWT, Swing, JavaFX & SWT 2
S GUI aussehen unter Windows und Linux (und Mac) AWT, Swing, JavaFX & SWT 13
N Swing von Windows zu Ubuntu AWT, Swing, JavaFX & SWT 3
S Swing Threads Windows 7 64 bit AWT, Swing, JavaFX & SWT 12
E Windows Kontext Menü - Laufendes Programm AWT, Swing, JavaFX & SWT 3
A Swing Probleme unter Windows 7 AWT, Swing, JavaFX & SWT 5
Dragonfire Swing UTF-8 BOB Probleme mit Windows Look and Feel AWT, Swing, JavaFX & SWT 4
J Applet Linux(-(k)ubuntu-)-Firefox-Java-Plugin - Fensterschließprobleme die bei Windows so nicht auftreten AWT, Swing, JavaFX & SWT 4
F AWT MouseMotionListener e.getButton() ist immer 0 unter Linux und Windows AWT, Swing, JavaFX & SWT 6
E Implementierung des Windows Rechners? AWT, Swing, JavaFX & SWT 7
LittleJavaCup Suchmaschine programmieren (wie bei Windows) AWT, Swing, JavaFX & SWT 2
W TrayIcon in Windows 7 unscharf AWT, Swing, JavaFX & SWT 8
R Windows-Dateien auf GUI ziehen AWT, Swing, JavaFX & SWT 3
G Quaqua unter Windows AWT, Swing, JavaFX & SWT 15
S LookAndFeel Look and Feel mit Windows funktioniert nicht AWT, Swing, JavaFX & SWT 8
G Windows XP layout herausfinden AWT, Swing, JavaFX & SWT 7
J Java & Windows-7-Taskbar AWT, Swing, JavaFX & SWT 13
M Swing JFileChooser mit Windows 7 AWT, Swing, JavaFX & SWT 8
L JPanel mit Objekten selektieren wie unter Windows / Ubuntu AWT, Swing, JavaFX & SWT 4
A Swing LAF unter Windows: javax.swing.DebugGraphics cannot be cast to java.awt.Graphics2D AWT, Swing, JavaFX & SWT 5
M Fenster Windows-Like anordnen AWT, Swing, JavaFX & SWT 2
B Swing Windows Shortcuts ersetzen AWT, Swing, JavaFX & SWT 9
P Swing [gelöst/erledigt] Gleicher Code läuft unterschiedlich unter Linux und Windows AWT, Swing, JavaFX & SWT 5
G JFrame und Windows Vista? AWT, Swing, JavaFX & SWT 4
G JFrame in Windows? AWT, Swing, JavaFX & SWT 4
D Transperency of Windows AWT, Swing, JavaFX & SWT 7
P SWT, Windows 2000, GDI+ und Microsoft Redistributable AWT, Swing, JavaFX & SWT 3
N Modale Windows AWT, Swing, JavaFX & SWT 2
G windows look and feel problem AWT, Swing, JavaFX & SWT 7
S KeyEvents in Linux und Windows AWT, Swing, JavaFX & SWT 14
M Globale Events in Windows abfangen AWT, Swing, JavaFX & SWT 2
M Windows-Applikationen minimieren AWT, Swing, JavaFX & SWT 4
G Windows Vista Gadget AWT, Swing, JavaFX & SWT 5
T SWT - Wie Windows erstelltes .jar auf einem MAC ausführen? AWT, Swing, JavaFX & SWT 25
M Windows-Fensterinhalt in Java-Applikation darstellen AWT, Swing, JavaFX & SWT 6
G Windows Taste in KeyEvent? AWT, Swing, JavaFX & SWT 4
P SWT - "Combo" aus dem Windows-FileDialog AWT, Swing, JavaFX & SWT 3
A JProgressBar: Farbe im Windows Look&Feel ändern. AWT, Swing, JavaFX & SWT 1
K Windows Style als standard? AWT, Swing, JavaFX & SWT 2
S Bei SWT den Windows beenden Button manipulieren? AWT, Swing, JavaFX & SWT 4
T JGoodies unter Windows 98 AWT, Swing, JavaFX & SWT 4
F AWT Programm unter Linux anders als unter Windows ! AWT, Swing, JavaFX & SWT 8
N SWT: GUI Windows Events AWT, Swing, JavaFX & SWT 8
P Swing-Komponenten - Standart-Windows Design? AWT, Swing, JavaFX & SWT 4
I Windows LaF verbessern? AWT, Swing, JavaFX & SWT 12
F Schriftarten unter Windows und Linux AWT, Swing, JavaFX & SWT 6
T Windows-Typisches Menü für Swing AWT, Swing, JavaFX & SWT 3
G Windows LookAndFeel - Classpath AWT, Swing, JavaFX & SWT 6
M Windows file icons in Java verwenden AWT, Swing, JavaFX & SWT 2
TheJavaKid Windows 98 LaF AWT, Swing, JavaFX & SWT 4
G standard blau (windows) != color.blue AWT, Swing, JavaFX & SWT 2
G JTable wird im Windows Look&Feel nicht gedruckt AWT, Swing, JavaFX & SWT 5
B Komische Darstellung unter Windows 2000 AWT, Swing, JavaFX & SWT 2
W Problem mit Fensteranzeige in Windows AWT, Swing, JavaFX & SWT 3
O Windows Lautstärke regeln wie? AWT, Swing, JavaFX & SWT 23
C Java Programm wie Windows Taskleiste AWT, Swing, JavaFX & SWT 2
P Garfikfehler unter Windows 2000 AWT, Swing, JavaFX & SWT 3
T Programm gleich wie Windows Media Player in den Task geben AWT, Swing, JavaFX & SWT 10
H Wie bastelt man eine Baumstruktur wie im Windows-Explorer? AWT, Swing, JavaFX & SWT 5
A Probleme mit Windows Style (Background) AWT, Swing, JavaFX & SWT 4
javasdann JTable Kopfzeile in Windows Look&Feel unschön. AWT, Swing, JavaFX & SWT 3
L windows explorer AWT, Swing, JavaFX & SWT 4
O SWT-Anwendung für Windows und Linux verteilen AWT, Swing, JavaFX & SWT 3
B JTree + Linien im Windows L&F AWT, Swing, JavaFX & SWT 9
T Das Windows Fenster "Öffnen" mit Java darstellen AWT, Swing, JavaFX & SWT 9
V Windows Look für JTree? AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben