gpt4 book ai didi

java - 为每次更新移动 JLabel 的位置

转载 作者:行者123 更新时间:2023-11-30 06:27:15 25 4
gpt4 key购买 nike

我正在学习 Swing,我有以下代码:

public class SimView {

private JFrame frame;
private JLabel background;
private JPanel car_panel;

public SimView() {

frame = new JFrame("GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 500);
frame.getContentPane().setLayout(null);

background = new JLabel("");
background.setIcon(new ImageIcon(
"C:\\Users\\D__\\Desktop\\background.png"));
background.setBounds(0, 0, 384, 462);
frame.getContentPane().add(background);
frame.setVisible(true);

car_panel = new JPanel();
car_panel.setBounds(175, 430, 16, 21);
car_panel.setVisible(true);
car_panel.setBackground(Color.BLACK);
background.add(car_panel);

MoveCarRunnable carMover = new MoveCarRunnable(car_panel);

}

private static class MoveCarRunnable implements Runnable {

private JPanel car;

MoveCarRunnable(final JPanel car) {

this.car = car;

}

@Override
public void run() {
// Should I call rePaint() on the car_panel here then ?

}

}

我想做的是为每次更新移动名为“汽车”的 JLabel 的 y 坐标,以获得它自行移动的效果,即没有用户交互。我不太确定如何执行此操作,我想我需要某种 repaint() 方法来为每次更新重绘 JLabel 的位置。但是我如何让这个类知道它需要更新位置呢?

任何指针(链接/代码)将不胜感激。我想了解 Swing 及其组件在这种情况下如何工作的概念,而不仅仅是采用解决方案,但我当然对解决方案感兴趣,因此我可以更深入地研究它。谢谢

编辑:请看我上面的编辑代码

最佳答案

您必须创建一个单独的 Thread 来修改标签的位置,然后调用 validate()repaint()在容器上 (frame.getContentPane())。不要忘记在线程中放置一些 sleep() 值。

但是,创建一个单独的 JPanel 会有更好的方法。在其中,您将覆盖 paintComponent 方法或 paint 方法,您将在其中绘制图像而不是移动 JLabel

关于java - 为每次更新移动 JLabel 的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13494210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com