Hi,
ich habe ein Problem, und zwar:
Der unten stehende Quelltext soll einen Bewegung eines Button von einer bestimmten Position zu einer anderen in einem JPanel bezwecken, das in ein JFrame (ist nicht im QT) eingebunden ist. Dabei soll von einem Auslöserbutton mit ActionListener und durch Aufruf einer AuslöserMethode diese Buttonbewegung hervorgerufen werden.
Da die Animation erst nur bei Aufruf der AuslöserMethode möglich war, und beim Druck des Auslöserbuttons das GUI laggte und der Button nur an der Endposition erschien( keine Animation also), habe ich iwo gelesen, dass sleep() das Gui zum laggen brint. Also dachte ich, versuch ich's mal mit Threads......
Nur hat das bis jetzt nichts geholfen
P.S:
Wenn ich thread.run() durch thread.start() ersetze,
bewegen sich bei einem Schleifenaufruf der AuslöserMethode alle zu bewegendes Buttons gleichzeitig (soll nicht so sein), aber wenigstens gibt es eine Animation beim Drücken des Auslöserbuttons
Hoffe, irgendjemand kann mir Hilfe leiste
Übrigens, mit invokeLater klappt's iwie auch nicht
ich habe ein Problem, und zwar:
Der unten stehende Quelltext soll einen Bewegung eines Button von einer bestimmten Position zu einer anderen in einem JPanel bezwecken, das in ein JFrame (ist nicht im QT) eingebunden ist. Dabei soll von einem Auslöserbutton mit ActionListener und durch Aufruf einer AuslöserMethode diese Buttonbewegung hervorgerufen werden.
Da die Animation erst nur bei Aufruf der AuslöserMethode möglich war, und beim Druck des Auslöserbuttons das GUI laggte und der Button nur an der Endposition erschien( keine Animation also), habe ich iwo gelesen, dass sleep() das Gui zum laggen brint. Also dachte ich, versuch ich's mal mit Threads......
Nur hat das bis jetzt nichts geholfen
P.S:
Wenn ich thread.run() durch thread.start() ersetze,
bewegen sich bei einem Schleifenaufruf der AuslöserMethode alle zu bewegendes Buttons gleichzeitig (soll nicht so sein), aber wenigstens gibt es eine Animation beim Drücken des Auslöserbuttons
Java:
import javax.swing.*;
import java.awt.*;
public class Test extends JPanel
{
private ButtonThread thread;
private int i=0;
private class ButtonThread extends Thread
{
private int x;
private int y;
private JButton button;
public ButtonThread(JButton button, int x, int y, String name )
{
this.button=button; this.x=x; this.y=y; setName(name);
}
public void run()
{
boolean status=false;
int yjetzt=button.getLocation().y;
int xjetzt=button.getLocation().x;
while(!status)
{
try
{
sleep(10);
//System.out.println(""+button.getLocation().x+" "+button.getLocation().y);
button.setLocation(xjetzt,yjetzt);
if(xjetzt<=x){xjetzt+=10;}else{if(yjetzt<=y){yjetzt+=10;}else{status=true;}}
}
catch(InterruptedException e){}
}
}
}
public Test()
{
setLayout(null);
}
public void buttonAnimation(JButton button, int x,int y)
{
thread=new ButtonThread(button,x,y,""+i);
System.out.println(""+Thread.currentThread());
thread.run();
}
public void paintComponent(Graphics g)
{
g.setColor(Color.white);
g.fillRect(0,0,this.getWidth(),this.getHeight());
}
}
Hoffe, irgendjemand kann mir Hilfe leiste
Übrigens, mit invokeLater klappt's iwie auch nicht