Interface JLabel bewegt sich nicht sondern teleportiert sich...

CptK

Bekanntes Mitglied
Hallo,
ich hätte gerne, dass sich ein JLabel mit einem Icon langsam über den Bildschirm bewegt, leider bewegt es sich nicht, sondern wird einfach da hin teleportiert. Ich habe es mit einem Timer versucht, das funktioniert leider nicht...
Hier der Code:
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import java.util.Timer;

import javax.swing.*;

public class Munition {
   
    private JLabel patrone[] = new JLabel[5];
    private int breite = 10, höhe = 610;
    private JButton schuss;
    private Timer time;
   
    void createPatrone() {

        for(int i = 0; i < 5;i++) {
            Icon icon = new ImageIcon("rsc/shotpat.png");
            patrone[i] = new JLabel(icon);
            patrone[i].setBounds(breite,höhe,20,60);
            patrone[i].setVisible(true);
            Gui.panel.add(patrone[i]);
            breite += 30;
        }
       
        schuss = new JButton("SCHIEßEN");           
        schuss.setBounds(500,570,100,50);           
        schuss.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
            Schuss();
            }
        });
        schuss.setVisible(true);                   
        Gui.panel.add(schuss);   

    }
   
    void Schuss() {
       
    time = new Timer();   
        while(patrone[4].getX() <= 400) {
        time.scheduleAtFixedRate(new TimerTask() {
       
                @Override
                public void run() {
                   
                        patrone[4].setLocation(patrone[4].getX()+3,patrone[4].getY()-1);
                        patrone[4].repaint();
                    }
               
            }, 0, 9);
        }
    }
    void Laden() {                    
    }     
}

Vielen Dank für die Hilfe, vor allem über konkrete Verbesserungsvorschläge und Code-Änderungen würde ich mich freuen!
 
Naja, Du "schedulest" den Timer in einer while-Schleife bis zum Sankt-Nimmerleins-Tag. Probier mal folgendes (ungetestet):

Java:
Timer time = new Timer();
time.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                if (patrone[4].getX() < 400) {
                    patrone[4].setLocation(patrone[4].getX() + 3, patrone[4].getY() - 1);
                } else {
                    timer.cancel();
                } 
            }
        });
    }
}, 0, 9);
 

Neue Themen


Zurück
Oben