需要在GridLayout中移动JLabel的帮助

我正在尝试将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;
    }
}
zhouhsmp3 回答:需要在GridLayout中移动JLabel的帮助

此街区

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次。为此,您需要在机器人移动之间引入延迟。

,

您和当前的评论员对此感到不满(或耸耸肩)。无需添加或删除组件或更改Z轴来移动机器人,只需将“”移到的位置的标签文本和新的更改为 ““?”。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class MovingBot {

    private JComponent ui = null;
    String bot = new String(Character.toChars(129302));
    Font font;
    JLabel[] labels = new JLabel[100];

    MovingBot() {
        initUI();
    }

    public void initUI() {
        if (ui!=null) return;
        Font[] fonts = GraphicsEnvironment.
                getLocalGraphicsEnvironment().getAllFonts();
        for (Font font : fonts) {
            if (font.canDisplay(129302)) {
                this.font = font.deriveFont(20f);
            }
        }

        ui = new JPanel(new GridLayout(0,20,2,2));
        ui.setBorder(new EmptyBorder(4,4,4));

        for (int ii=0; ii<labels.length; ii++) {
            JLabel l = new JLabel(" ");
            l.setFont(font);
            ui.add(l);
            labels[ii] = l;
        }
        labels[0].setText(bot);
        ActionListener moveListener = new ActionListener() {

            int count = 0;

            @Override
            public void actionPerformed(ActionEvent e) {
                int indexLast = count%100;
                labels[indexLast].setText(" ");
                count++;
                int indexCurrent = count%100;
                labels[indexCurrent].setText(bot);
            }
        };
        Timer timer = new Timer(50,moveListener);
        timer.start();
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception useDefault) {
                }
                MovingBot o = new MovingBot();

                JFrame f = new JFrame(o.getClass().getSimpleName());
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setLocationByPlatform(true);

                f.setContentPane(o.getUI());
                f.pack();
                f.setMinimumSize(f.getSize());

                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}
本文链接:https://www.f2er.com/3099060.html

大家都在问