繁体   English   中英

在Swing中显示图形时遇到问题

[英]Having trouble displaying graphics in 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();

我想念什么?

 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"));

我讨厌不知道为什么有些办法。 但是我还记得遍历Graphics教程,并看到他们在构造函数中执行此操作,在它们看来绘制了第二个图像

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的答案,但是由于我不知道您使用两个BufferedImages的原因,所以我不想提出建议。 您可能一直在尝试做本教程正在做的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM