JButton bewegen

Status
Nicht offen für weitere Antworten.

Sladda

Aktives Mitglied
Hallo.

Ich habe ein kleines Thread-verständnis-Problem, glaube ich:

Ich hab ein JFrame mit nem JButton drauf. nun möchte ich, dass der Button von links in den Frame reinbewegt wird, sodass es aussieht, als würde er ins Bild "reinfahren". Das möchte (wahscheinlich muss) ich mit einem eigenen Thread machen, in dem ich das Bild 1 Pixel nach rechts bewege, dann den Thread ca 30ms schlafen lasse und dann weiter, bis er sich 100pixel nach rechts bewegt hat.
Das Problem: Ich weiß einfach nich, wie ich diesen Thread konstruiere, der auf den Button in der Gui-Klasse zugreifen kann und diesen bewegen kann....
Könnt ihr mir vielleicht ein paar Tips geben ? Bitte!

Viele Grüße
Chris
 
Erster Link bei Google ("thread java")
www.dpunkt.de/java/Programmieren_mit_Java/Multithreading/3.html

Code:
class DemoThread extends Thread {
  
    public void run() {
      for(int i = 0; i < 10; i++) {
        try {
          sleep(5000);
        }
        catch(InterruptedException e) {
        }
        System.out.println("Demo-Thread");
      }
    }
  
  }

Bei
Code:
 for(int i = 0; i < 10; i++)
die Wiederholungen einstellen (in deinem Fall wäre dir mit einem "while(ButtonIst NichtAufPosition)" geholfen

Bei
Code:
sleep(5000);
die Zeit anpassen (Millisekunden). (In deinem Fall also so 50)

Bei
Code:
System.out.println("Demo-Thread");
Das tun was passieren soll; (Hier die Buttonposition verändern, validate())[/i]
 
ich würds so machen :

du baust ne Klasse, die Thread extended
und übergibst ihr im Konstruktor das Button-Objekt

Thread t = new MyThreadClass(button)

im eigentlich Thread rufst du dann immer button.setlocation(x_neu,y_neu) auf

ODER du machst im Hauptprogramm(bzw. Gui) ne statische funktion, die von deinem Thread immer aufgerufen wird und die dann den Button versetzt
 
Erstmal vielen Dank für die schnellen Antworten.
Verjigorm hat mein Problem ganz gut erfasst und so habe ich mir die Lösung auch vorgestellt, nur
das Problem ist folgendes:

Code:
import javax.swing.JButton;

public class ThreadTest extends Thread{


	
	public ThreadTest(JButton button1){
		
	}
	public void run() {
      for (int i = 0; i< 100; i++)
		button1.setLocation(button1.getX()+1, button1.getY());
		
	}
}

so geht das natürlich nicht, denn in der run methode ist button1 unbekannt...
Hilfe 🙂

EDIT: sleep hab ich da vergessen, is ja aber erstmal egal....
 
dann mach ihn dir doch bekannt in der Klasse 🙂
dafür gibts ja den Konstruktor 🙂

Code:
...
private JButton button1; //buttonname ist völlig egal, der kann auch Hugo heissen ^^
 public ThreadTest(JButton button1){
      this.button1 = button1; // dann ist dein button1 auch in run() bekannt, weil er ne "Klassenvariable ist"
   } 
...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben