2016-05-29 3 views
1

Ich habe einen JFrame mit zwei Tasten. Eine der Schaltflächen beim Klicken bewegt (btnMove) die andere Schaltfläche (Shape) von der aktuellen Position zu einer anderen. Ich verwende einen Thread als Timer zum Zählen in Sekunden, aber jedes Mal, wenn der Zähler inkrementiert, bewegt sich die Schaltfläche zurück in ihre ursprüngliche Position .Java-Repositionierung des Objekts, wenn der Timer inkrementiert

public class FrameTh extends JFrame { 

    class count extends Thread { 

     public int p = 0; 

     public void run() { 
      for (int i = 1; i < 100; i++) { 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        System.out.println(e); 
       } 

       lblCounter.setText("Seconds: " + i); 

      } 
     } 

    } 
    count t1 = new count(); 
private void formWindowActivated(java.awt.event.WindowEvent evt) {          

     t1.start(); 


    }          

    private void btnMoveActionPerformed(java.awt.event.ActionEvent evt) {           
shape.setLocation(23, 44); 


    } 

Antwort

2

Das Kernproblem ist, sind Sie das Layout-Management-API zu kämpfen, die, wenn Sie setText rufen die Behälter für ungültig erklärt werden verursacht und weitergegeben aus

Sie betrachten könnte so etwas wie JLayeredPane verwenden, aber denken Sie daran, Sie werden voll verantwortlich für die Größe und Position der Komponente

Das andere Problem, das Sie haben, ist, dass Sie die single-threaded Art von Swing verletzen, Swing ist nicht threadsicher, was bedeutet, dass Sie die ui nicht aus aktualisieren sollten der Event Dispatching Thread.

Um dieses besondere Problem zu lösen Sie einen Swing-Timer anstelle einem Threads verwenden sollen, How to use Swing Timers für mehr Details

+0

Vielen Dank für Ihre Antwort sehen, aber nach der JLayeredPane verwenden und den Swing-Timer verwenden, ich habe immer noch die gleichen Problem. – Henry

+0

Haben Sie einen Layout-Manager auf JLayeredPaned angewendet? Die Verwendung von Layout-Manager ist nicht die Verwendung eines Layout-Manager, die andere Möglichkeit ist es, Ihre eigenen zu erstellen – MadProgrammer

Verwandte Themen