Optimieren von "Lupen" Effekt

Status
Nicht offen für weitere Antworten.

_tiGGa_

Mitglied
hallo,

ich habe mir eine Klasse geschrieben, welche ein Label vergößert.
Wenn man mit der Maus auf das Label fährt, wird eine Methode aufgerufen, die das Label bis zu einer bestimmten
Größe vergrößert.
Dies passiert in einem Timer.

Genauso, wenn das Event MouseExited aufgerufen wird, wird das Label wieder bis zur Ursprungsgröße verkleinert.
Dies passiert wiederum auch in einem Timer.
So habe ich nun 2 Timer pro Label, was nicht gerade performant ist. :cry:

Nun habe ich mehrere solcher labels, also hat jedes Label ein Objekt der ResizeKlasse.

Beispiel:
5 Label -> 5 Objekte von "ResizeKlasse" --> 10 Timer

Wie könnte man das vielleicht lösen?

Hier mal ein Quellcodeauszug:

Code:
public void setKleiner(){		
         if (timer != null){
    			timer.stop();
    		}		
    		timer = new Timer(10, new ActionListener() {  
    			public void actionPerformed(ActionEvent e) {					
    				kleiner();						
    			}
    		}); 
    		timer.start();	        	
	}
	
	public void setGroesser(){		
         if (timer != null){
    			timer.stop();
    		}		
    		timer = new Timer(10, new ActionListener() {  
    			public void actionPerformed(ActionEvent e) {					
    				groesser();							
    			}
    		}); 
    		timer.start();  
	}
	
	
	private void kleiner(){
		if (this.label.getWidth() < 100){
			this.label.setSize(100, 100);
			this.label.setLocation(point);
			timer.stop();			
		}else{
			this.label.setSize(this.label.getWidth()-2, this.label.getHeight()-2);
			this.label.setLocation(this.label.getX()+1, this.label.getY()+1);
		}			
	}
	
	private void groesser(){
		if (this.label.getWidth() > 150){					
			timer.stop();
		}else{
			this.label.setSize(this.label.getWidth()+2, this.label.getHeight()+2);
			this.label.setLocation(this.label.getX()-1, this.label.getY()-1);
		}							
	}

	public void setLocation(int i, int j) {
		point = new Point(i,j);		
	}

mfg
tigga
 

_tiGGa_

Mitglied
also, das eigentliche problem is das:
die timer laufen nicht alle gleich schnell
wenn ich zum beispiel auf das erste label mit der maus rüber gehen, und warte bis das label die maximal größe erreicht hat,
und dann auf das nächste läbel gehe, baut sich ja das erste label ab, aber das zweite laben baut sich schon auf.

so laufen also timer1 zum abbauen von label1 und
timer2 zum aufbauen von label2 gleichzeitig.

nun kann man dieses spielchen bis zu 5 mal machen, da ich 5 labels hab.

nun sieht es so aus, als wäre manchmal ein label schneller beim vergößern / verkleinern fertig, als wenn sich 2 labels gleichzeit bewegen.

dieses effekt habe ich sehr stark bei einem schwachen pc.
bei einem leistungsstakren bzw. normalen tritt dies nicht so doll auf.
aber ich finde es ist trotzdem störend

mfg
tigga
 

Wildcard

Top Contributor
Ein Swing Timer ist nicht sonderlich genau.
Für den von dir gewählten Zeitpunkt von 10 Millisekunden daher eher ungeeignet.
Nimm stattdessen Threads oder auch einen java.util.Timer
 

_tiGGa_

Mitglied
hmm, kk, ich versuch es mal nachher,
aber kann es sein das der timer, welchen ich verwende,
nicht so im eigenen einen thread hat?
da es mir so vorkommt, dass, wenn 2 timer gestartet sind, die sich gegenseitig blockieren.

diesen effekt möchte ich beseitigen,
oder meinst du, mit einem util.timer is dies schon damit behoben?

danke, für die antwort :)

mfg
 

Wildcard

Top Contributor
_tiGGa_ hat gesagt.:
nicht so im eigenen einen thread hat?
da es mir so vorkommt, dass, wenn 2 timer gestartet sind, die sich gegenseitig blockieren.
API lesen wenn man etwas benutzt? :wink:
# Notification listeners are potentially all executed in the same thread. Therefore, they should execute rapidly to avoid holding up other listeners or perturbing the regularity of fixed-delay executions. See NotificationBroadcasterSupport.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben