2013-12-17 60 views
0

我正在用Java写一个模拟器,但没有很多使用Graphics对象的经验。我写了一个类在Java中显示图形的问题

public class RoadNetwork extends JPanel { 
    BufferedImage truck1; 

    public RoadNetwork() throws IOException{ 
     truck1 = ImageIO.read(getClass().getResource("Truck.png")); 
    } 

    protected void paintcomponent (Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(car1, 0, 0, 100, 100, this); 
    } 
} 

在我的主要功能,我初始化类,如下所示:

JFrame F1 = new JFrame(); 
F1.setLayout(new GridBagLayout()); 
GridBagConstraints constraints = new GridBagConstraints(); 
F1.setSize(1280,760); 
RoadNetwork roadnetwork = new RoadNetwork(); 
roadnetwork.setPreferredSize(new Dimension(500,500)); 
roadnetwork.setVisible(true); 
constraints.gridx = 40; 
constraints.gridy = 40; 
F1.add(roadnetwork, constraints); 
F1.setVisible(true); 

不过,我只是得到一个灰框作为输出,没有图像。我已经通过将其作为单独的ImageIcon添加到框架中来测试该图像,并且可行。但是,我似乎无法让RoadNetwork类在框架中显示。我应该以某种方式调用paintcomponent函数吗?我究竟做错了什么?

回答

5

从你的代码,你有一个错误的方法。

protected void paintcomponent (Graphics g) { 

不需要绘画。

protected void paintComponent (Graphics g) { 

是方法的正确名称,它将覆盖父母一个,并且这个被JVM调用。

+0

非常感谢;这解决了这个问题。 – Martin

+2

当您的意图是重写某个方法时,添加@Override注释。这样,如果再犯一个错字,编译器会检测到它并抛出错误,因为该方法不会重写任何东西。 –