[英]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.