Überlappende Transparenz und repaint()

trunkz0r

Mitglied
Hi,

folgende Situation:
Ich habe ein JFRame mit Hintergrundbild, darin ein (halb)-transparentes JPanel (Hintergrund schwarz mit alpha=0.5f) und darin wiederum einen angepassten JButton, der seine Grenzen nicht ganz bemalt (hat abgerundete Ecken).

Der Button muss desöfteren neu gezeichnet werden (repaint), wenn man mit der Maus drüberfährt, klickt oÄ.
Dabei entsteht aber das Problem, dass die Bereiche des Buttons, die nicht vollgeständig gezeichnet werden, immer dunkler werden. Ich nehme mal an, dass das daher kommt, dass das Panel im Hintergrund im Bereich des Buttons ebenfalls mit gezeichnet wird und dadurch die Transparenz irgendwann verloren geht.

Habe sowohl beim JPanel und JButton das paintComponent überschrieben, setOpaque auf false gesetzt und beim JButton noch setContentAreFilled, setBorderPainted und setRolloverEnabled ebenfalls auf false gesetzt.
Das repaint() erfolgt bei MouseEvents.

Ist hinter dem Button keine transparente Komponente, funktioniert er übrigens wie gewollt.

Wenn das nicht ganz verständlich sein sollte, würde ich auch eben Screenshots machen oder ne Beispielklasse des Problems schreiben.

Danke schonmal für die Hilfe,

Alex
 
T

Tomate_Salat

Gast
Das Problem kenne ich :D. Einfachste möglichkeit ohne Quelltext: setzt bei den Parents auch ein repaint. Wenn du dir sicher sein willst, dann setze ein repaint von dem gesamte frame.
 

trunkz0r

Mitglied
Und wie mache ich das am besten? getParent().repaint() bewirkt ein merkwürdiges Verhalten. Im darüberliegenden Panel werden dann Ausschnitte vom Frame und die fokusierte Komponente gezeichnet.

Außerdem fällt mir gerade auf, dass im Hintegrund des Buttons auch die Komponente im Fokus (zB ein TextField) gezeichnet wird.
 

trunkz0r

Mitglied
Okay, habs nun hinbekommen mit

Code:
	protected void paintComponent(Graphics g){
		Component comp = this;
		while(comp.getParent()!=null){
			comp = comp.getParent();
			if(comp instanceof JPanel || comp instanceof JFrame){
				comp.repaint();
			}
		}
                .....
        }

Danke ;)
 

trunkz0r

Mitglied
Nun fällt mir gerade auf, dass dadurch alleine die CPU-Last auf 30% ansteigt (sonst 0%). Kann es sein, dass das Programm durch den o.g. Code in ne Schleife gerät (Elternkomponente-repaint() ruft transparente Komponente-repaint() auf usw)?
Gibts keine effektivere Möglichkeit oder weiss jemand, wie ich den Effekt verhindern kann?

Achja, im o.g. Code habe ich noch ein break; vergessen, aber das hilft auch nicht weiter ;)
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Eigentlich sollte es kein Problem geben, wenn man statt
button.repaint();
ein
panelWithButton.repaint();
macht. Kann man das mit einem KSKB nachvollziehen?

(BTW: In der paintComponent repaint aufzurufen IST falsch... mach das wieder raus... ;))
 

trunkz0r

Mitglied
Ja, wenn man die repaint()-Aufrufe der Komponente alle ans darüberliegende Panel weiterleiten würde, wäre das sicherlich besser.
Aber wie macht man das am besten bei einem JTextField? In dem Fall wird ja ständig repaint() aufgerufen.
 

Marco13

Top Contributor
Welche Rolle dieses TextField dort jetzt spielt, ist mir nicht ganz klar. Vielleicht würde ein Beispiel wirklich helfen, nachvollziehen zu können, wo der Fehler liegt...
 

trunkz0r

Mitglied
Naja, während ich bei einem Button ja alle repaint Aufrufe manuell durchführen konnte (mit MouseListener), wäre das bei einem TextField nicht so einfach (glaube ich), da das ja ständig neu gezeichnet wird, zumindest wenn es den Fokus hat (alleine schon wegen dem Zeiger).

Aber habe das Problem nun irgendwie umgegangen, indem ich die Implementierung vom darunterliegenden Panel geändert habe:
Ursprünglich hatte ich das Panel so geschrieben, dass es immer ein darüberliegendes Panel hat, in das dann die Komponenten hinzugefügt werden. Sprich: JFrame->Angepasstes, tsransparentes Panel->JPanel->Angepasster, transparenter Button.
Der Umweg über das JPanel war dazu da, damit ich mit GridBag die Insets festlegen konnte.

Hab das nun umgeschrieben, sodass das Panel nur noch die paint Aufgaben übernimmt und stattdessen nen EmptyBorder hat mit den entsprechenden Insets.
Keine Ahnung warum, aber nun klappts soweit einwandfrei.

Wenn jemand ne Idee hat wieso es vorher nicht geklappt hat, immer her damit ;) . Ansonsten bin ich froh, dass es jetzt klappt. Achja, setOpaque(false) auf das JPanel hab ich natürlich gemacht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
R Transparenz AWT, Swing, JavaFX & SWT 21
O Transparenz mit AWTUtilities aber nur das Fenster nicht die Buttons AWT, Swing, JavaFX & SWT 8
R Transparenz mit AWTUtilities AWT, Swing, JavaFX & SWT 6
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
D Repaint Funktioniert nicht AWT, Swing, JavaFX & SWT 2
D JUNG Repaint function does not work AWT, Swing, JavaFX & SWT 2
E repaint Probleme AWT, Swing, JavaFX & SWT 13
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
L Swing repaint() ruft paintComponent(g1d) nicht auf AWT, Swing, JavaFX & SWT 12
G Repaint wird nicht durchgeführt AWT, Swing, JavaFX & SWT 8
I Swing Verhindern, dass repaint() kaskadiert AWT, Swing, JavaFX & SWT 6
ms_cikar Update swingUtilities Repaint in der Schleife AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
K Methode repaint() AWT, Swing, JavaFX & SWT 1
B Swing Wann brauche ich repaint() ? AWT, Swing, JavaFX & SWT 1
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
A repaint(); AWT, Swing, JavaFX & SWT 9
J Swing ungewünschter Nebeneffekt bei der repaint() Methode AWT, Swing, JavaFX & SWT 3
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
S 2D-Grafik repaint()-Aufruf. Und nichts geschieht. AWT, Swing, JavaFX & SWT 5
Joew0815 JDialog repaint() funktioniert nicht wie gewünscht. AWT, Swing, JavaFX & SWT 2
P JPanel und Repaint AWT, Swing, JavaFX & SWT 5
J JavaFX Automatisches Neuzeichnen ("Repaint") abstellen. AWT, Swing, JavaFX & SWT 10
F JTable Repaint Issue AWT, Swing, JavaFX & SWT 1
N Observer: update ruft nicht repaint auf AWT, Swing, JavaFX & SWT 0
C Repaint() funktioniert nicht in TabbedPanel AWT, Swing, JavaFX & SWT 5
S JList repaint AWT, Swing, JavaFX & SWT 1
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
M Repaint mittels Button richtig aufrufen klappt nicht AWT, Swing, JavaFX & SWT 1
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D repaint() klappt anders als vorgestellt AWT, Swing, JavaFX & SWT 15
R Repaint() in Schleifen, Threads AWT, Swing, JavaFX & SWT 13
B Swing Repaint Problem - mal wieder AWT, Swing, JavaFX & SWT 5
P 2D-Grafik Gezielter Repaint einzelner Frames in Java-Game AWT, Swing, JavaFX & SWT 6
javampir Bei repaint nix los AWT, Swing, JavaFX & SWT 2
B Swing repaint() AWT, Swing, JavaFX & SWT 3
Ernesto95 AnimationLoop - Problem bei Aufruf von repaint AWT, Swing, JavaFX & SWT 6
P 2D-Grafik repaint(); steigender RAM Verbauch AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
S Applet Repaint AWT, Swing, JavaFX & SWT 3
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
R Swing Grafikfehler bei repaint AWT, Swing, JavaFX & SWT 2
N repaint() blockieren AWT, Swing, JavaFX & SWT 6
K canvas zeig nach repaint nichts an AWT, Swing, JavaFX & SWT 8
M Repaint() AWT, Swing, JavaFX & SWT 14
J Swing repaint, repaint, repaint AWT, Swing, JavaFX & SWT 8
M Applet repaint() verlangsamen AWT, Swing, JavaFX & SWT 7
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
P EDT Problem? Kein Aufruf der repaint Methode AWT, Swing, JavaFX & SWT 6
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
kodela Problem mit repaint() AWT, Swing, JavaFX & SWT 3
N Swing Funktion repaint() updated nicht AWT, Swing, JavaFX & SWT 5
F repaint reagiert nicht AWT, Swing, JavaFX & SWT 8
S AWT Probleme mit repaint() AWT, Swing, JavaFX & SWT 2
D Repaint()? Oder was??? AWT, Swing, JavaFX & SWT 5
M Eine nicht korrekte Darstellung bei repaint() warum? AWT, Swing, JavaFX & SWT 4
T 2D-Grafik Kreis "von Hand" zeichnen -> jedesmal repaint()? AWT, Swing, JavaFX & SWT 6
R validate(), repaint funktionieren nicht! AWT, Swing, JavaFX & SWT 7
B AWT Canvas überdeckt nach repaint() JComboBox-Optionen AWT, Swing, JavaFX & SWT 2
B Swing verschachteltes GUI: repaint() ändert mehr als nur gewünschte Component AWT, Swing, JavaFX & SWT 4
S validate(), invalidate(), repaint(),... Was kommt wann? AWT, Swing, JavaFX & SWT 5
M 2D-Grafik repaint() löscht altes Bild nicht AWT, Swing, JavaFX & SWT 2
J repaint() nicht richtig? AWT, Swing, JavaFX & SWT 6
R repaint erzwingen AWT, Swing, JavaFX & SWT 3
Zettelkasten repaint() von anderen Klassen aufrufen AWT, Swing, JavaFX & SWT 4
H repaint()-Problem - 50% CPU-Auslastung AWT, Swing, JavaFX & SWT 4
P repaint während Thread läuft AWT, Swing, JavaFX & SWT 9
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
N Swing MainWindow(JFrame) aktualisieren(neuzeichnen) repaint AWT, Swing, JavaFX & SWT 4
T repaint() Problem AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Repaint - Alternative? AWT, Swing, JavaFX & SWT 3
C JLabel, JTextArea, JScrollPane. repaint(); ? AWT, Swing, JavaFX & SWT 6
N Swing repaint() funktioniert nicht AWT, Swing, JavaFX & SWT 5
T Swing repaint funktioniert nur manchmal? AWT, Swing, JavaFX & SWT 6
K Jpanel repaint problem (Fullscreen) AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben