需要在GridLayout中移动JLabel的帮助

问题描述 投票:0回答:1

我正在尝试将以JLabel表示的机器人移动到GridLayout。进行了移动,但仅在最后一个精加工方格中显示JLabel。我希望看到从盒子到盒子的移动。我尝试使用javax.swing.Timer,但是它不起作用。

import java.awt.Color;
import java.awt.Component;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Serializable;
import java.util.Vector;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.LayoutStyle;
import javax.swing.Timer;

// Robot

public class Robot extends Case implements Serializable {
    private ImageIcon imageRobot;
    private Color couleur;

    public Robot () {
        imageRobot = new ImageIcon("./assets/balle.png");
        setIcon(imageRobot);
    }

    public void seDeplacer (JPanel panel) {
        Robot currentRoot = this;
            int delay = 1000; //milliseconds
              ActionListener taskPerformer = new ActionListener() {
                  public void actionPerformed(ActionEvent evt) {
                        for (int i=0; i<5; i++) {
                        panel.remove(panel.getComponent(i));
                        panel.add(currentRoot, i);
                        panel.doLayout();   
                        }
                  }
              };
              new Timer(delay, taskPerformer).start();

    }

    public void detruire () {

    }

    public void setCouleur (Color couleur) {
        this.couleur=couleur;
    }

    public Color getCouleur () {
        return this.couleur;
    }
}
java swing jlabel layout-manager grid-layout
1个回答
0
投票

此块

public void seDeplacer (JPanel panel) {
        Robot currentRoot = this;
            int delay = 1000; //milliseconds
              ActionListener taskPerformer = new ActionListener() {
                  public void actionPerformed(ActionEvent evt) {
                        for (int i=0; i<5; i++) {
                        panel.remove(panel.getComponent(i));
                        panel.add(currentRoot, i);
                        panel.doLayout();   
                        }
                  }
              };
              new Timer(delay, taskPerformer).start();

字面意思是“每秒移动我的机器人5次”,因此机器人每秒眨眼5次。

您的想法是每秒移动机器人1次。为此,您需要在机器人移动之间引入延迟。

© www.soinside.com 2019 - 2024. All rights reserved.