Transparenz mit AWTUtilities aber nur das Fenster nicht die Buttons

Status
Nicht offen für weitere Antworten.

outbreaker

Bekanntes Mitglied
Hallo,

ich habe schon viel gelesen im Forum aber dazu noch nicht wirklich eine Antwort gefunden.
Ich habe mir den Artikel zu AWTUtilities durchgelesen und auch getestet aber ich finde keine Möglichkeit den Frame zu z. B. 50% durchsichtig zu machen aber den Button ganz normal zu zeichnen ohne das er durchsichtig wird. :bahnhof:
In Figure 5 ist es ja so zu sehen.
Nun habe ich beim Beispiel auf 50% gestellt und auch "per-pixel translucent effect" aktiviert nur das der Button dann bei mir auch Transparent wird ???:L

Geht das überhaupt das der Button nicht Transparent ist?
Wenn Ja kann mir einer sagen wie das im Code aussehen müsste?

besten Dank schon mal
 

KrokoDiehl

Top Contributor
Hallo.
Ich habe ehrlich gesagt noch nichts mit Transparenz gemacht (ok, außer bei BufferedImage...), aber finde es spontan interessant!
Was du vorhast, ist aber genau das, was in deinem genannten Link bei Figure 5 und 6 ist, stimmt's?
Hast du schonmal probiert bei dem Button
Code:
setOpaque(true)
zu setzen? Oder ggfs. seine Hintergrundfarbe mit entsprechenden, deckenden Alphawert?
 

outbreaker

Bekanntes Mitglied
setOpaque(true) hatte ich auch probiert aber es macht den Anschein als ob alles im Fenster transparent gemacht wird ;(
 

Nader

Mitglied
..
Geht das überhaupt das der Button nicht Transparent ist?
..


ich glaube schon. du müsstest allerdingst die paint() Methode der Komponenten anpassen, bzw. die Komponenten selber zeichnen!

Java:
  Graphics2D g2d = (Graphics2D) g;
  g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.75f));
 

outbreaker

Bekanntes Mitglied
Wenn ich die Paint()-Methode von meinem JFrame so überschreibe zeichnet er leider trotzdem alles durchsichtig

hier mal mein Code
MainKlasse:
[Java]
public class Main_InfoFrame
{

/**
* @param args
*/
public static void main(String[] args)
{
final InfoFrame fd = new InfoFrame();
fd.addComponentListener(new ComponentAdapter() {

@Override
public void componentResized(ComponentEvent evt) {
Shape shape = null;
shape = new RoundRectangle2D.Float(0, 0, fd.getWidth(), fd.getHeight(), 30, 30);
AWTUtilitiesWrapper.setWindowShape(fd, shape);
}
});
AWTUtilitiesWrapper.setWindowOpaque(fd, false);

//AWTUtilitiesWrapper.setWindowOpacity(fd, 0.6f);
fd.setVisible(true);
}
}
[/code]

JFrame-Klasse:
Java:
public class InfoFrame extends JFrame
{

	private JPanel hintergrundPanel;
	private JPanel textPanel;
	
	public InfoFrame()
	{
		initHintergrundPanel();
		initTextPanel();
	}
	
	private void initHintergrundPanel()
	{
		hintergrundPanel = new JPanel(null)
		{
			@Override
			protected void paintComponent(Graphics g)
			{
				if (g instanceof Graphics2D) 
				{

					Graphics2D g2d = (Graphics2D) g;
					g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.1f));
					System.out.println("drin3");
					super.paintComponent(g2d);
				}
				else
					super.paintComponent(g);
			}
		};
		setUndecorated(true);
		setLocationRelativeTo(null);
		hintergrundPanel.setBackground(new Color(243,235,216));
		this.add(hintergrundPanel);
		this.setSize(500, 500);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLocationRelativeTo(null);
	}
	
	private void initTextPanel()
	{
		textPanel = new JPanel(new BorderLayout()){
			@Override
			protected void paintComponent(Graphics g)
			{
				if (g instanceof Graphics2D) 
				{

					Graphics2D g2d = (Graphics2D) g;
					g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f));
					System.out.println("drin p2");
					super.paintComponent(g2d);
				}
				else
					super.paintComponent(g);
			}
		};
		setUndecorated(true);
		setLocationRelativeTo(null);
		textPanel.setBackground(new Color(255,255,0));
		textPanel.setBounds(10, 20, 480, 100);
		hintergrundPanel.add(textPanel);
		setText("Überschrift", "das ist der Texgt");
	}
	
	private void setText(String head, String text)
	{
		JLabel headJL = new JLabel(" " + head);
		Font f = new Font("Verdana", Font.BOLD, 18);
		headJL.setFont(f);
		
		JLabel textJL = new JLabel(text);
		textJL.setFont(textJL.getFont().deriveFont(12));
		
		textPanel.add(new JLabel(" "),BorderLayout.WEST);
		textPanel.add(headJL,BorderLayout.NORTH);
		textPanel.add(textJL,BorderLayout.CENTER);
		
		/**Button hinzufügen**/
		JButton b = new JButton("test test")
		{
			@Override
			public void paintComponent(Graphics g)
			{
				if (g instanceof Graphics2D) 
				{
					Graphics2D g2d = (Graphics2D) g;
					g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f));
					super.paintComponent(g2d);
				}
				else
				{
					super.paintComponent(g);
				}
			}
		};
		b.setOpaque(true);
		textPanel.add(b,BorderLayout.SOUTH);
	}
	
	@Override
	public void paint(Graphics g)
	{
		if (g instanceof Graphics2D) 
		{
			Graphics2D g2d = (Graphics2D) g;
			g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
			System.out.println("drin2");
			super.paint(g2d);
		}
		else
		{
			super.paint(g);
		}
	}
}

Ich habe jetzt jeweils die Paint() und paintComponent() Methoden überschrieben
leider nicht mit Erfolg wie es scheint :noe:

Ich möchte halt das nur das HintergundPanel durchsichtig ist und das textPanel nicht
 

Nader

Mitglied
..
Ich möchte halt das nur das HintergundPanel durchsichtig ist und das textPanel nicht

das Problem liegt daran, dass man durch setComposite() das Objekt Graphics manipuliert bzw. verändert. Dieses Objekt wird weiterverwenden, um die Komponenten des Panels zu zeichnen. Lösung wäre, dass man das weit unter (schon beim Renderen einer Komponente-> also bei L&F) macht.

Such die Stelle, wo Hintergrund vom Panel gezeichnet wird (ich vermute mal PanelUI.paint()) und da kannst du Composite auf Graphics setzen.
 

Bartleby

Aktives Mitglied
das Problem liegt daran, dass man durch setComposite() das Objekt Graphics manipuliert bzw. verändert. Dieses Objekt wird weiterverwenden, um die Komponenten des Panels zu zeichnen. Lösung wäre, dass man das weit unter (schon beim Renderen einer Komponente-> also bei L&F) macht.

Such die Stelle, wo Hintergrund vom Panel gezeichnet wird (ich vermute mal PanelUI.paint()) und da kannst du Composite auf Graphics setzen.

Oder einfach das alte Graphics-Object wiederherstellen:

Java:
            @Override
            protected void paintComponent(Graphics g)
            {
                if (g instanceof Graphics2D) 
                {
 
                    Graphics2D g2d = (Graphics2D) g;
                    Composite oldComposite = g2d.getComposite();
                    g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.1f));
                    System.out.println("drin3");
                    super.paintComponent(g2d);
                    g2d.setComposite(oldComposite);
                }
                else
                    super.paintComponent(g);
            }
        };
 

Nader

Mitglied
Oder einfach das alte Graphics-Object wiederherstellen:

das wird natürlich nicht helfen, weil super.paintComponent() schon mit veränderten Graphics arbeitet!:(

g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.1f));
super.paintComponent(g2d);
g2d.setComposite(oldComposite);

Leider wird im Swing das Graphics Object nicht geklont, sondern nur kopiert! und genau das ist das Problem.???:L
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Transparenz mit AWTUtilities AWT, Swing, JavaFX & SWT 6
S Swing Probleme mit transparenz der Hintergrundfarbe und JRadioButtons AWT, Swing, JavaFX & SWT 2
B Bild bearbeiten mit Transparenz (spiegeln, Farben austauschen) AWT, Swing, JavaFX & SWT 8
S Images färben und transparenz ändern AWT, Swing, JavaFX & SWT 4
Luk10 Transparenz von ARGB ints AWT, Swing, JavaFX & SWT 5
C Java2D Transparenz geht bei einfärben verloren AWT, Swing, JavaFX & SWT 7
B Swing Cursor-Transparenz AWT, Swing, JavaFX & SWT 2
C 2D Simulation möglichst effizient (ggf. Transparenz) AWT, Swing, JavaFX & SWT 23
T Überlappende Transparenz und repaint() AWT, Swing, JavaFX & SWT 10
R Transparenz AWT, Swing, JavaFX & SWT 21
J Swing Transparenz bei Swingelementen AWT, Swing, JavaFX & SWT 2
V [SWT] Shell transparenz AWT, Swing, JavaFX & SWT 3
T Pseudo-Transparenz für Applets -> Background grabben AWT, Swing, JavaFX & SWT 15
H Einzelne Pixel auf Transparenz überprüfen? AWT, Swing, JavaFX & SWT 3
D Label und Transparenz . AWT, Swing, JavaFX & SWT 4
T Transparenz mit SWT AWT, Swing, JavaFX & SWT 7
T Transparenz bei Graphics AWT, Swing, JavaFX & SWT 9
P 2 Probleme mit Panel: index setzten und transparenz AWT, Swing, JavaFX & SWT 4
A Transparenz ? AWT, Swing, JavaFX & SWT 13
E transparenz (alpha) - komisches aussehen von textfeldern! AWT, Swing, JavaFX & SWT 2
L Transparenz Problem mit verschiebung AWT, Swing, JavaFX & SWT 8
G png und Transparenz AWT, Swing, JavaFX & SWT 4
F JWindow mit einem Bild und Transparenz AWT, Swing, JavaFX & SWT 4
F Problem mit Transparenz, MouseEvents und Performance AWT, Swing, JavaFX & SWT 3
M Hintergrundbild und grafischer Button (Transparenz Probleme) AWT, Swing, JavaFX & SWT 3
B AWTUtilities: Access restriction AWT, Swing, JavaFX & SWT 2
H AWTUtilities AWT, Swing, JavaFX & SWT 3
U Was ist ein Shape, also klar ein Objekt, aber was ist damit gemeint (Graphics2d)? Und was sidn affinetransformationen AWT, Swing, JavaFX & SWT 1
pkm MainFrame durch Actionlistener auffrischen, aber wie? AWT, Swing, JavaFX & SWT 2
G JavaFX , Duplicate erzeugt aber ich weis nicht wo AWT, Swing, JavaFX & SWT 4
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
J Warum kann ich die Spaltennummer in der Konsole anzeigen, diese aber nicht speichern ? AWT, Swing, JavaFX & SWT 6
J Injection - Aber Controller sind null AWT, Swing, JavaFX & SWT 3
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
X JavaFX Einfache FX Application, aber wie alte Features umgehen? AWT, Swing, JavaFX & SWT 10
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
Joker4632 JButton nicht sichtbar, aber funktionsfähig AWT, Swing, JavaFX & SWT 8
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
K Swing Textfeld verstecken aber benutzen AWT, Swing, JavaFX & SWT 15
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
K Fenster mittig im Vollbildschirm - ok, aber ... AWT, Swing, JavaFX & SWT 2
D Swing JFreeChart Crosshair Label - setPreferredSize oder ähnliches, aber wo ? AWT, Swing, JavaFX & SWT 1
Tausendsassa Frame öffnet aber zeigt keinen Inhalt... AWT, Swing, JavaFX & SWT 10
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
P jtabel Zeilen auswählbar, aber nicht editierbar AWT, Swing, JavaFX & SWT 3
D Passwort [Aber mit 3 Versuchen] Funktioniert nicht wie erwartet AWT, Swing, JavaFX & SWT 4
A Swing Koordinatensystem wird gezeichnet verschwindet aber und die Einteilungen bleiben nicht bestehen AWT, Swing, JavaFX & SWT 5
C Applet Applet funktioniert in Eclipse aber nicht in Browser AWT, Swing, JavaFX & SWT 1
Tom299 JavaFX AnchorPane resizen, aber wie? AWT, Swing, JavaFX & SWT 3
wolfgang63 JavaFX Transparenter Hintergrund aber sichtbare Buttons AWT, Swing, JavaFX & SWT 6
J JavaFX Anwendung läuft in eclipse, nicht aber exportiert AWT, Swing, JavaFX & SWT 2
S JList ist leer, aber DefaultListModel hat die Daten? AWT, Swing, JavaFX & SWT 9
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
X Swing Ein neues Fenster öffen aber ohne ein extra Prozess zu starten AWT, Swing, JavaFX & SWT 1
X AWT Graphics2D zum LWJGL Display hinzufügen aber wie? AWT, Swing, JavaFX & SWT 4
V kann ich in einer Klasse stage und scene deklarieren, aber in anderen Klassen Inhalte hinzufügen ? AWT, Swing, JavaFX & SWT 5
N Programm läuft perfekt in Eclipse aber nicht in .JAR AWT, Swing, JavaFX & SWT 3
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
TheJavaKid JFrame defokusieren aber im Vordergrund behalten AWT, Swing, JavaFX & SWT 0
brunothg Swing JTable -> AUTO_RESIZE_OFF aber das Fenster ausfüllen AWT, Swing, JavaFX & SWT 0
J JFrame maximierbar aber nicht resizable AWT, Swing, JavaFX & SWT 6
D JTable markier- aber nicht veränderbar AWT, Swing, JavaFX & SWT 10
E Angehängtes Layout, aber wie? AWT, Swing, JavaFX & SWT 12
O getValueAt liefert "", aber es wird was angezeigt AWT, Swing, JavaFX & SWT 12
S JTable Zellinhalt markierbar aber nicht editierbar AWT, Swing, JavaFX & SWT 4
V Swing Wochenplaner in Swing erstellen! Aber wie? AWT, Swing, JavaFX & SWT 13
M Swing eigene Dialoge, aber wie genau? AWT, Swing, JavaFX & SWT 5
B Swing JDialog modal, aber trotzdem Frame auswählbar AWT, Swing, JavaFX & SWT 2
D JDialog alwaysOnTop, aber nur innerhalb der Applikation AWT, Swing, JavaFX & SWT 3
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
J JMenuBar ist geaddet, aber nicht im Frame. Wo ist der Fehler? (inkl. Code) AWT, Swing, JavaFX & SWT 2
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
L SWT Drop erfolgreich, aber GUI-Aktion abgebrochen AWT, Swing, JavaFX & SWT 4
G Swing resizeable aber nur y-Achse nur wie? AWT, Swing, JavaFX & SWT 5
M Swing JMenu verdeckt durch Komponente (aber kein AWT und Swing mix!?) AWT, Swing, JavaFX & SWT 3
N Swing JSpinner mit Datum aber ohne Uhrzeit AWT, Swing, JavaFX & SWT 2
propra Doppelklick von Einzelklick unterscheiden, aber richtig ... AWT, Swing, JavaFX & SWT 10
J Swing JTable: Komplette Zeile aber ohne Spalten markieren AWT, Swing, JavaFX & SWT 11
T speichern funktioniert,aber öffnen nicht AWT, Swing, JavaFX & SWT 2
C JFrame ohne Titelleiste, aber mit Borders AWT, Swing, JavaFX & SWT 2
M Fenster aufteilen, aber mit welchem LayoutManager? AWT, Swing, JavaFX & SWT 10
K Modaler Dialog aber trotzdem Aktualisierung des MainFrames AWT, Swing, JavaFX & SWT 6
M Swing MVC Pattern verstanden, aber Probleme bei der Umsetzung AWT, Swing, JavaFX & SWT 5
S Bilddatei kopieren, aber ohne verluste und ohne zu großen Speicherverbrauch AWT, Swing, JavaFX & SWT 17
J Mehrere JRadioButtons, aber nur 1 darf ausgewählt sein AWT, Swing, JavaFX & SWT 4
F JTable soll mit Buttons befüllt werden, aber nicht in jede Zelle einer Spalte AWT, Swing, JavaFX & SWT 3
S Swing Grundprinzip String ausgeben, aber wie? AWT, Swing, JavaFX & SWT 6
J Swing JCheckBox enabled, aber graues Kästchen AWT, Swing, JavaFX & SWT 2
F Bild auf JPanel, aber wie? AWT, Swing, JavaFX & SWT 6
O Swing JButton werden richtig gewechselt aber die Maus macht die alten wieder Sichtbar?? AWT, Swing, JavaFX & SWT 5
G SWT-App läuft nicht unter OSX, unter Win aber problemlos AWT, Swing, JavaFX & SWT 3
F ActionListener von JButton funktioniert mit JFrame aber nicht mit JDialog AWT, Swing, JavaFX & SWT 2
L Swing Serverbrowser, aber welche componenten? AWT, Swing, JavaFX & SWT 2
F In Textfeld Kommazahl anzeigen aber ohne Komma eingeben AWT, Swing, JavaFX & SWT 14
T JTable: editieren bei Doppelklick deaktivieren, aber... AWT, Swing, JavaFX & SWT 2
data89 PopUp-Panel bauen - aber wie? AWT, Swing, JavaFX & SWT 2
D Swing JEditorPane mit HTML aber ohne Bilder AWT, Swing, JavaFX & SWT 3
T JSpinner, 3 JSpinner aber nur ein SpinnerDateModel AWT, Swing, JavaFX & SWT 7
B JTable: Zeilen sortieren, aber bestimmte Zeilen fest lassen AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben