AWT Java Toolbar

  • Themenstarter Themenstarter aslkdfjasf
  • Beginndatum Beginndatum
A

aslkdfjasf

Gast
Ich möchte für meinen Rechner eine art Toolbar machen.
Sie soll immer eingeblendet werden (oben) und via MouseHover vergrößert werden. Also wenn du Maus nicht drauf ist, wird es entsprechend kleiner...!

Das funktioniert auch soweit. Allerdings mit einer bescheidenen Lösung von:
Java:
	 public void mouseEntered(MouseEvent e) 
	 {
		frame.setLocation(0,0);
	 }

	 public void mouseExited(MouseEvent e) 
	 {
		frame.setLocation(0,-65);
	 }


Jetzt habe ich ja auch Buttons uns so in der Toolbar. Wenn ich nun mit der Maus über einen Button gehe, wird ja wieder mouseExited auferufen. Also klein.
Habe mior geholfen, in dem ich dem Button einfach auch ein mouseListener gebe.
Allerdings, kommen wir zu meinem Problem Zwinkern , flacker der Hintergrund der Toolbar immer ein bisschen auf, wenn ich die Componentn Wechsel!
(Klar, erst wird Exited aufgerufen -> KLEIN. Danach direkt wieder Entered ->GROß).

Also so würde es ja funktionieren. Aber das mit den aufflacken nervt tiereisch.. Jmd dazu eine andere/bessere idee?

MfG ice
 
Hallo aslkdfjasf,

Kleines Beispiel:

Java:
boolean entered = false;

public void mouseEntered(MouseEvent e) 
{
  frame.setLocation(0,0);
  entered = true;
}
 
public void mouseExited(MouseEvent e) 
{
  entered = false;
  new Thread(new Runable() {
    public void run() {
        try {
          Thread.sleep(500);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
        if(!entered){
          frame.setLocation(0,-65);
        }
      }
  }).run();
}
 
Es kommt trotzdem zu dem Flackern!
auch wenn dazwischen 500ms unterscheid sind, es ergibt keinen unterscheid...
 
Das liegt glaube ich daran, dass frame.setLocation(0,0); immernoch jedes mal aufgerufen wird. änder das mal in:

Java:
boolean entered = false;
 
public void mouseEntered(MouseEvent e) 
{
  Point p = frame.getLocation();
  if(p.x != 0 || p.y != 0){
    frame.setLocation(0,0);
  }
  entered = true;
}
 
public void mouseExited(MouseEvent e) 
{
  entered = false;
  new Thread(new Runable() {
    public void run() {
        try {
          Thread.sleep(500);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
        if(!entered){
          frame.setLocation(0,-65);
        }
      }
  }).run();
}
 
Das funkrtioniert so auch nicht!
Mein prorgamm wartet dan lediglich 500 MS und dann popt es ganz normal zu und direkt wieder auf:"DAs flackern!"..

Jemand eine andere Idee??

MfG
 
Das liegt glaube ich daran, dass frame.setLocation(0,0); immernoch jedes mal aufgerufen wird. änder das mal in:

Java:
      }
  }).run();
}

Sollte wohl eher
Code:
... ).start();
heißen, da man Threads für gewöhnlich startet und nicht manuell deren run - Methode ausführt, auch wenn start() das letztendlich bewirkt, aber halt korrekt.
 

Neue Themen


Zurück
Oben