当前位置: 首页 > 知识库问答 >
问题:

在Swing中显示图形时出现问题

沈琨
2023-03-14

我一直在尝试可视化地模拟交通问题,但由于某种原因,我在swing窗口中只得到了空白输出。我只看到一个灰色的屏幕,而不是一个不断移动的汽车画面。

我的绘画课如下所示:

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class RoadNetwork extends JPanel {
     BufferedImage tempicon = ImageIO.read(getClass().getResource("Truck.png"));
     BufferedImage truckicon = new BufferedImage(tempicon.getWidth(), tempicon.getHeight(), BufferedImage.TYPE_INT_ARGB);

     public RoadNetwork() throws IOException {
         repaint();
     }


protected void paintComponent (Graphics g) {
    super.paintComponent(g);
    g.clearRect(0, 0, 600, 600); // insert window size parameters here
    for (int i = 0; i < AMEC.vehiclecounter; i++) {
        if (AMEC.vehicle[i].spawned == true && AMEC.vehicle[i].finished == false) { // if the truck is somewhere on the plant
        g.drawImage(truckicon, AMEC.getcoord(i)[0], AMEC.getcoord(i)[1], this);
        }
    }
    g.drawImage(truckicon, 100, 100, this);
}
}

在我的主函数中对类的调用如下:

RoadNetwork roadnetwork = new RoadNetwork();
roadnetwork.setVisible(true);
JFrame frame = new JFrame();
frame.add(roadnetwork);
frame.setSize(600, 600);
frame.setVisible(true);

然后,随着我模拟的每一次迭代,我打电话给

roadnetwork.repaint();

我错过了什么?

共有2个答案

艾哲
2023-03-14

我讨厌不知道为什么某些东西会起作用。但是我记得通过图形图论,看到他们在构造函数中这样做,他们似乎在画第二个图像

BufferedImage img = ImageIO.read(imageSrc);
int w = img.getWidth(null);
int h = img.getHeight(null);
BufferedImage bi = new
    BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.getGraphics();
g.drawImage(img, 0, 0, null);

这是我做的修复。我希望我能给出更多的解释,但请随意查看我链接的教程

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class RoadNetwork extends JPanel {
    BufferedImage tempicon;
    BufferedImage truckicon;

    public RoadNetwork() throws IOException {

        tempicon = ImageIO.read(getClass().getResource("resources/stack_reverse.png"));
        int w = tempicon.getWidth(null);
        int h = tempicon.getHeight(null);
        truckicon = new
            BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
        Graphics g = truckicon.getGraphics();
        g.drawImage(tempicon, 0, 0, null);
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        //g.clearRect(0, 0, 600, 600); // insert window size parameters here
        // for (int i = 0; i < AMEC.vehiclecounter; i++) {
        // if (AMEC.vehicle[i].spawned == true && AMEC.vehicle[i].finished ==
        // false) { // if the truck is somewhere on the plant
        // g.drawImage(truckicon, AMEC.getcoord(i)[0], AMEC.getcoord(i)[1],
        // this);
        // }
        // }
        g.drawImage(truckicon, 100, 100, this);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                try {
                RoadNetwork roadnetwork = new RoadNetwork();
                roadnetwork.setVisible(true);
                JFrame frame = new JFrame();
                frame.add(roadnetwork);
                frame.setSize(600, 600);
                frame.setVisible(true);
                } catch (IOException es) {
                    es.printStackTrace();
                }
            }
        });
    }
}

另外,我打算建议@AndrewThompson的答案,但是因为我不知道你使用两个BufferedImage的原因,我不想建议它。你可能一直在尝试做教程正在做的事情。

席俊
2023-03-14
 BufferedImage tempicon = ImageIO.read(getClass().getResource("Truck.png"));
 BufferedImage truckicon = new BufferedImage(tempicon.getWidth(), tempicon.getHeight(), BufferedImage.TYPE_INT_ARGB);

在第二个代码行的末尾,truckicon仍然完全不可见(因为它是一个透明的图像,我们没有绘制任何内容)。试试吧。

 BufferedImage truckicon = ImageIO.read(getClass().getResource("Truck.png"));
 类似资料:
  • 我在Spring MVC中显示jsp页面时遇到了问题。这是一个带有Gradle和IntelliJ CE的基本hello world Spring MVC: 我得到以下错误页面: 这是我的身材。格拉德尔: 视图解析器文件: 控制器页面: jsp页面位置: application.properties文件内容: 使用默认模板引擎,页面显示正确,但使用jsp,它无法工作 日志错误: https://ha

  • 问题内容: 我通过这种方式创建了一个JEditorPane: 我将此窗格放在JFrame上。 文字显示正确,但是我看不到图片,只有一个正方形指示应该有图片(即:未找到图片时浏览器会显示“破碎的图片”) 问题答案: 您必须提供类型,并获取资源。就这样。我测试过的示例,但是不确定格式。希望能帮助到你:

  • 我正在尝试写一些程序,在那里我加载图像到一个面板。以下是我的5个问题: 1>可以加载什么样的(扩展)图像有限制吗?我试着加载一个.bmp文件,即使我用.jpg重命名了它,它也没有加载。但是,加载了一些扩展名为.png或.jpg的其他文件。 就是这样。用一些例子来详细说明会很好。提前道谢。

  • 我不知道如何在RMarkdown与MS Word输出中心的数字标题。我将Markdown文档指向参考Word模板,模板中的图形标题是正确的。问题是RMarkdown不知道标题应该是标题。它把它们当作普通文本。 我如何告诉RMarkdown“示例标题”实际上是图形文本而不仅仅是普通文本?

  • 主要内容:1 Swing显示图片的介绍,2 Swing显示图片的方法,3 Swing显示图片的案例1 Swing显示图片的介绍 为了显示图像,我们可以使用Graphics类的drawImage() 方法。 2 Swing显示图片的方法 方法 描述 public abstract boolean drawImage(Image img, int x, int y, ImageObserver observer) 用于绘制指定的图像。 3 Swing显示图片的案例 输出结果为:

  • 图形与显示 [AGP] agp={off|try_unsupported} off 表示关闭内核的AGP(CONFIG_AGP)支持; try_unsupported 表示尝试驱动那些不受支持的芯片(可能会导致系统崩溃或数据错误) [HW,DRM] gamma=浮点数 设置显示器的Gamma值。 video.brightness_switch_enabled={0|1} [背景知识]如果ACPI