【问题标题】:How do I assign variables from my program to icons in Swing?如何将程序中的变量分配给 Swing 中的图标?
【发布时间】:2013-12-16 12:40:38
【问题描述】:

我正在 Netbeans 中用 Java 编写一个模拟,实际的非图形编码大部分已完成。但是,我想做一个图形实现,我使用图标来表示模拟中变化的变量。

该模拟模拟了沿道路行驶的卡车,我想要一个图标来代表每辆卡车。代码将每辆卡车和每条道路显示为一个单独的对象,每个对象都有自己的属性,但只有少数属性需要在图形实现中建模。例如,每辆卡车的位置是道路的一个属性,显示卡车沿着道路行驶了多远。

在图形界面中对此进行建模的最简单方法是什么?我假设我需要为 Netbeans 中的图形结构分配一个图标,然后让它根据道路的距离属性自行更新,但我不知道如何处理。

任何帮助将不胜感激。

【问题讨论】:

  • 您在寻找任何动画吗?
  • 而这个“每辆卡车的位置是道路的属性”究竟是什么意思?
  • 嗯,动画会很好,但如果额外的编码太多,简单地从一个地方跳到另一个地方就可以了
  • 您对 Swing 有多少经验?你知道如何使用Graphics 类吗?
  • 每条道路都被初始化为我创建的自定义对象。车辆沿道路行驶的距离是存储在此对象中的变量。

标签: java swing netbeans simulation


【解决方案1】:

使用 Graphics 类,您可以绘制道路、汽车(使用图像),并使用 Swing Timer 制作动画。

要绘制汽车,您可以将图像绘制到屏幕上

public class Map extends JPanel {
    BufferedImage car1;
    BufferedImage car2;
    BufferedImage car3;

    public Map(){
        try {
            car1 = ImageIO.read(getClass().getResource("somecarimage.png"));
            car3 = ImageIO.read(getClass().getResource("somecarimage.png"));
            car3 = ImageIO.read(getClass().getResource("somecarimage.png"));
        }
    }

    protected void paintComponent(Graphics g){
        super.paintComponent(g);

        // use the drawImage method
        g.drawImage(car1, xLocation, yLocation, height, width, this);
        g.drawImage(car2, xLocation, yLocation, height, width, this);
        g.drawImage(car2, xLocation, yLocation, height, width, this);
    }
}

如你所见,我在屏幕上画了三辆汽车。您可以将您的类与数据一起用作xLocationyLocation

如果你想为汽车制作动画,你可以使用 Swing Timer

Timer timer = new Timer(100, new ActionListener(){   // causes an action every 100 millis
    public void actionPerformed(ActionEvent e){
        // change the xLocation and yLocation of each car
        car1.xLocation += 5;
        car1.yLocation += 5;
        car2.xLocation += 5;
        car2.yLocation += 5;
        car3.xLocation += 5;
        car3.yLocation += 5;

        repaint();
    }
});
timer.start();

您可以在 actionPerformed 中的某处使用 if 语句告诉计时器何时停止。

Javadocs 和教程

Timer javadoc | Timer tutorial | Graphics javadoc | Graphics tutorial

【讨论】:

  • 非常感谢。我会试试这个,但它看起来完全符合我的想法。
  • 另外,我注意到您尚未接受任何答案。为了将来参考,如果答案可以帮助您解决问题,您应该接受它。这样,任何阅读您帖子的未来读者都知道哪些答案最有帮助。 (这是投票箭头下方的复选标记)
  • 好的,谢谢。我是 StackOverflow 的新手,所以每一点都有帮助。
  • @Martin:一个相关的例子见here
猜你喜欢
  • 2018-05-22
  • 2021-06-08
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
相关资源
最近更新 更多