Animation in GlassPane: Performanceeinbruch JFrame maximiert

Status
Nicht offen für weitere Antworten.

m@nu

Bekanntes Mitglied
hallo

ich zeichne auf meiner GlassPane einen timer-gesteuerten effekt sobald der user auf einen button geklickt hat (icon der schaltfläche wird immer grösser und durchsichtiger, bis sie schliesslich ganz verschwindet ... iZoom für wen's ein begriff ist :) )

funktioniert alles ganz prächtig. nur habe ich jetzt das problem, dass sobald mein JFrame maximiert ist, die animation extrem ruckelig von statten geht.
habe das clipping bereits nur auf meinen animationsbereich gelegt. hat keine änderung gebracht.

Code:
        protected void paintComponent(Graphics g) {
            if(timer != null && timer.isRunning()) {                
                Point p = SwingUtilities.convertPoint(src.getParent(), src.getLocation(), glassPane);
                int x = p.x - (cycle*stepSize)/2;
                int y = p.y - (cycle*stepSize)/2;
                int newWidth = imageWidth + (cycle*stepSize);
                int newHeight = imageHeight + (cycle*stepSize);
                float alpha = 1.0f - cycle/10f;
                
                
                
                Graphics2D g2 = (Graphics2D)g;
                g2.setClip(x, y, newWidth, newHeight);
                Image resized = image.getScaledInstance(newWidth, newHeight,
                        Image.SCALE_SMOOTH);
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
                g2.drawImage(resized, x, y, null);
            }
        }

SCALE_FAST hat ebenfalls nix geändert.
hat jemand eine idee wie ich das problem lösen könnte?

vielen dank & grüsse
m@nu
 

Wildcard

Top Contributor
Ich denke mal es liegt am skalieren. Kannst du die skalierten Images eventuell schon vorbereiten das du das nicht aus dem EventDispatcher machen musst?
 
B

Beni

Gast
Die Graphics2D kann auch selbst noch skaliert zeichnen, vielleicht wäre es damit schneller (zumindest müsste kein neues Image erstellt werden)?
 

m@nu

Bekanntes Mitglied
Wildcard hat gesagt.:
Ich denke mal es liegt am skalieren. Kannst du die skalierten Images eventuell schon vorbereiten das du das nicht aus dem EventDispatcher machen musst?
naja, wäre eine möglichkeit. das würde aber bedeuten, dass ich pro button beim laden der applikation 10 bis 11 bilder in den speicher laden müsste :? und ich bin mir noch nicht sicher, dass das alle buttons sein werden

:arrow: http://shared.msites.net/candyfeeder.png


Beni hat gesagt.:
Die Graphics2D kann auch selbst noch skaliert zeichnen, vielleicht wäre es damit schneller (zumindest müsste kein neues Image erstellt werden)?
zu beginn hatte ich das glaub'ich sogar mit der drawImage-methode gestrecht. aber leider leidet so die qualität ein wenig, und performancemässig hat sich leider nix geändert im "fenster-maximiert-modus"


hm, werd mal schauen obs am repainting der anderen komponenten in meinem JFrame liegen kann...
danke für die ideen auf jeden fall! (zusätzliche sind natürlich immernoch willkommen :bae: )
 

m@nu

Bekanntes Mitglied
@thE_29: dankeschön :)

jop, das gibt einen feed reader (momentan ist nur RSS2.0 implementiert... ist aber erweiterbar)
bin mit dem aussehen von den auf windows verfügbaren readern irgendwie nirgens ganz happy...
da hab ich mir gedacht, schreib da doch selber was :)
 

m@nu

Bekanntes Mitglied
@thE_29: hab mir aufgrund der RSS2.0 spezifikation selber was zusammengestellt... ist ja nicht so ein stress da den parser zu schreiben...

@AlArenal: gefällt mir einfach vom optischen her nicht :)
 

AlArenal

Top Contributor
m@nu hat gesagt.:
@AlArenal: gefällt mir einfach vom optischen her nicht :)

Geschmackssache. Mir ist zunächst wichtiger dass das Teil ordentlich funktioniert und gut bedienbar ist. Wenn ich mir deinen Screenshot anschaue, würde ich bei meinen derzeit rund 70 Feeds doch ne Krise bekommen, wollte ich da den Überblick bewahren. Da hilft mir dann auch keine schicke Optik.
 

m@nu

Bekanntes Mitglied
ne is klar... das mit der übersicht stimmt.
die idee zum programm ist aber eher aus eigennutzen entstanden. ich habe nicht sonderlich viele feeds, welche ich pro tag abarbeite... benutze momentan RSSOwl, welches mir für meinen nutzen doch ein wenig überdimensioniert scheint...

für die organisation habe ich den tagbutton eingebaut, über welchen ich später noch eine filterfunktion einbauen werde...

zudem muss ich zugeben, möcht' ich einfach wiedermal mit den möglichkeiten von swing herumexperimentieren :bae:
 

Wildcard

Top Contributor
Hat das maximieren eigentlich irgendeinen Einfluss auf deine Animationsstufen/Bildgrößen, oder sieht es genau gleich aus, dauert aber länger?
 

m@nu

Bekanntes Mitglied
das ist ja das komische... sieht genau gleich aus, und auch der clipping-bereich bleibt gleich (hab den mal per drawRect ausgeben lassen)
 

Wildcard

Top Contributor
hmm, ich würde mal einen Profiler versuchen. Sowas ähnliches ist mir auch mal passiert, lag dann ein einem blöden 'super' Aufruf :bae:
 

m@nu

Bekanntes Mitglied
dankeschön, werds mir mal anschauen...

hab mich mal an romain guy (http://www.jroller.com/page/gfx), meiner meinung nach der swing-gott schlechthin, gewendet.
hier seine antwort:

Romain Guy hat gesagt.:
Hi,

Avoid calling repaint() but rather repaint(x, y, w, h) when you don't need to repaint the
whole glass pane. That means you must indeed honor the clipping rectangle in your
painting code. The other problem is that repainting the glass pane entails repainting the
whole frame. To work around this, copy the content of the underlying frame in a picture
and use that picture as the background of your glass pane.

Although: DO NOT USE getScaledInstance(). Ever. Instead, call drawImage(image, x, y, w,
h, null). Do not forget to use a compatible image before painting it on screen, this will
speed up performance.

mit den grössenangaben im repaint-aufruf funktioniert das ganze göttlich :-D

danke für eure unterstützung leute.
grüsse aus der schweiz
m@nu
 

thE_29

Top Contributor
Hihi ;)

Naja, dafür gibts im repaint ja die x,y,w,h (oder rectangle) damit er nur das repainted!

Obacht ist dann in der paint Methode nicht mit Graphics.getClipBounds() zu arbeiten, da er dir sonst zuwenig zurückgibt ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Animation läuft nicht korrekt AWT, Swing, JavaFX & SWT 8
Ernesto95 JavaFX Return Value nach Beendigung einer Animation AWT, Swing, JavaFX & SWT 15
H Simple Animation mit Swing AWT, Swing, JavaFX & SWT 2
DeBoiJoshua 2D-Grafik Gif Animation will nicht laden AWT, Swing, JavaFX & SWT 1
S JavaFX WebView zeigt keine Animation AWT, Swing, JavaFX & SWT 5
E showAndWait is not allowed during animation or layout processing Memory FX AWT, Swing, JavaFX & SWT 2
A 2D-Grafik Ruckelfreie Animation AWT, Swing, JavaFX & SWT 20
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
L JavaFX Animation für Panel wechsel AWT, Swing, JavaFX & SWT 3
J Java FX Koordinaten NACH Animation setzen, wie? AWT, Swing, JavaFX & SWT 9
Pr0m3theus Animation nach Event AWT, Swing, JavaFX & SWT 6
F JavaFX Timeline Animation soll X- und Y-Position während Animation ändern AWT, Swing, JavaFX & SWT 2
javampir 2D-Grafik Effizienz bei animation AWT, Swing, JavaFX & SWT 0
C Pixel-Rendering/Animation Performance in BufferedImage AWT, Swing, JavaFX & SWT 1
wolfgang63 JavaFX Animation, Kreise im vorgegebem Takt durchs Fenster laufen lassen AWT, Swing, JavaFX & SWT 3
P Ansatz für 2D Animation gesucht AWT, Swing, JavaFX & SWT 2
Thallius HHübsche Kopier Animation? AWT, Swing, JavaFX & SWT 5
L JPanel kleine "Animation" AWT, Swing, JavaFX & SWT 7
E Animation läuft nicht mehr flüssig AWT, Swing, JavaFX & SWT 8
E Warum macht die einfache Animation einen kleinen Fehler? AWT, Swing, JavaFX & SWT 14
B 2D-Grafik Dynamisches Erstellen von Images und deren Animation AWT, Swing, JavaFX & SWT 4
R Swing Komponenten bleiben bei Animation unsichtbar AWT, Swing, JavaFX & SWT 7
J GIF Animation AWT, Swing, JavaFX & SWT 2
B Swing Thread+Animation AWT, Swing, JavaFX & SWT 7
R Swing Animation mit JLayeredPane? AWT, Swing, JavaFX & SWT 8
K 3D-Grafik Animation AWT, Swing, JavaFX & SWT 4
U Gif Animation mit JLabel AWT, Swing, JavaFX & SWT 3
P KeyListener + Animation AWT, Swing, JavaFX & SWT 2
D 2D-Grafik Animation flackert AWT, Swing, JavaFX & SWT 8
R Polygon-Animation mit Darstellungsfehlern AWT, Swing, JavaFX & SWT 5
StupidAttack Animation, JComponent AWT, Swing, JavaFX & SWT 3
S SWT Rudimentäre Bild Animation AWT, Swing, JavaFX & SWT 3
C Animation auf einem JPanel AWT, Swing, JavaFX & SWT 3
A paintComponent() - Animation AWT, Swing, JavaFX & SWT 2
S Ich brauche eine Idee: Animation mit teil eines Bildes AWT, Swing, JavaFX & SWT 16
H "Animation" AWT, Swing, JavaFX & SWT 2
S Animation korrekt darstellen AWT, Swing, JavaFX & SWT 8
Developer_X Nach Animation Button adden AWT, Swing, JavaFX & SWT 3
Developer_X Swing JPanel-THE ANIMATION AWT, Swing, JavaFX & SWT 3
T JFrame und Scale-Animation AWT, Swing, JavaFX & SWT 8
M Animation berechnen AWT, Swing, JavaFX & SWT 4
M Animation auf JPanel per Knopfdruck AWT, Swing, JavaFX & SWT 12
P Problem bei Animation AWT, Swing, JavaFX & SWT 2
K Animation auf GUI AWT, Swing, JavaFX & SWT 3
R ruckelfreie animation AWT, Swing, JavaFX & SWT 8
T Animation will nicht trotz Thread. AWT, Swing, JavaFX & SWT 14
S animation Flackern trotz doppelpufferung wieso? AWT, Swing, JavaFX & SWT 2
S Animation geht nicht AWT, Swing, JavaFX & SWT 3
rudi.schraml Animation von Robotern auf FactoryFloor - repaint()? AWT, Swing, JavaFX & SWT 7
J Animation - Runnable AWT, Swing, JavaFX & SWT 3
O Animation in einem JPanel AWT, Swing, JavaFX & SWT 2
H Animation startet nicht/ Thread AWT, Swing, JavaFX & SWT 6
N Animation nach einem bestimmten Ereignis starten lassen? AWT, Swing, JavaFX & SWT 4
A Problem mit Animation AWT, Swing, JavaFX & SWT 4
M Animation mit Keylistener AWT, Swing, JavaFX & SWT 2
G Swing Durch GlassPane auf Button klicken und ActionEvent auslösen AWT, Swing, JavaFX & SWT 0
D GlassPane für JPanel AWT, Swing, JavaFX & SWT 2
N Swing Frame mit GlassPane und Popup AWT, Swing, JavaFX & SWT 5
A Swing GlassPane Cursor wird bei fremder Komponente nicht angezeigt AWT, Swing, JavaFX & SWT 3
B GlassPane setVisible(true) funktioniert nicht AWT, Swing, JavaFX & SWT 2
M JComboBox auf GlassPane-Panel AWT, Swing, JavaFX & SWT 2
S Feste Position einer Komponente auf Glasspane AWT, Swing, JavaFX & SWT 6
F GlassPane deaktiviert MouseKlicks nicht AWT, Swing, JavaFX & SWT 6
hdi Swing GUI Sperren mit GlassPane AWT, Swing, JavaFX & SWT 7
K Alle Events abfangen mit GlassPane AWT, Swing, JavaFX & SWT 7
G Probleme mit Glasspane AWT, Swing, JavaFX & SWT 4
J Glasspane Demo von Sun hat Probleme - wie fix ich die? AWT, Swing, JavaFX & SWT 10
A GlassPane wird zu spät angezeigt AWT, Swing, JavaFX & SWT 2
G JDialog hinter Glasspane von JFrame. Geht das? AWT, Swing, JavaFX & SWT 3
TheJavaKid GlassPane AWT, Swing, JavaFX & SWT 5
C Frage zur GlassPane AWT, Swing, JavaFX & SWT 33
G Probleme mit GlassPane AWT, Swing, JavaFX & SWT 3
L GlassPane ein und abschalten AWT, Swing, JavaFX & SWT 3
J GlassPane - an Menupunkte herankommen AWT, Swing, JavaFX & SWT 2
M Problem mit GlassPane AWT, Swing, JavaFX & SWT 4
I GlassPane AWT, Swing, JavaFX & SWT 8
M Glasspane und dispatchen von Events AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben