2013-03-24 65 views
2

我遇到了一个奇怪的问题,我无法解决。我有两班JFrame类:JFrame没有从独立的类更新图形

public class TowerDefenceFrame extends JFrame { 

public TowerDefenceFrame() { 
    super("Tower Defence"); 
    setSize(1023, 708); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    //setResizable(false); 
} 

public static void main(String[] args) { 

    TowerDefenceFrame tdf = new TowerDefenceFrame(); 
    tdf.setVisible(true); 
    Map.main(args); 
    } 
} 

和图形类:

public class Board extends JPanel implements ActionListener { 
BufferedImage road; 
BufferedImage grass; 
Timer time; 

public Board() { 
    setFocusable(true); 
    time = new Timer(5, this); 
    time.start(); 

    try { 
     road = ImageIO.read(new File("../road.png")); 
     grass = ImageIO.read(new File("../grass.png")); 
    } catch (IOException ex) { 
     Logger.getLogger(Board.class.getName()).log(Level.SEVERE, null, ex); 
    } 


} 

public void actionPerformed(ActionEvent e) { 
    repaint(); 

} 

public void paint(Graphics g) { 
    super.paint(g); 

     for (int i = 0; i <= Map.mapWidth - 1; i++) { 
      for (int l = 0; l <= Map.mapHeight - 1; l++) { 

      if (Map.mapArray[l][i] == 1) { 
       g.drawImage(road, (Map.blockSize * i), (Map.blockSize * l), this); 

      } else if (Map.mapArray[l][i] == 0) { 
       g.drawImage(grass,(Map.blockSize * i), (Map.blockSize * l), this); 
      } 

     } 





    } 
     repaint(); 

    } 
} 

当我运行JFrame中出现的应用程序,但是从局级显卡没有。我正在寻找这个问题的答案,并找不到一个。我注意到,当我调整JFrame的大小时,板面上的图像出现了。这让我相信我不得不更新板类来获取图形。我试着在我的JFrame类中添加一个计时器循环来每隔1/2秒添加Board类。它没有工作。我一直难住这个问题一段时间,我想知道你是否有任何可以帮助,

谢谢。

+0

重写的方法是paintComponent(Graphics)。所有的摆动组件只能从事件派发线程使用,而不能从主线程使用。 – 2013-03-24 14:17:47

回答

2

类与诸如JAppletJFrameJ开始是Swing,并且AppletFrameAWT。方法paint()AWT类一起使用,但您使用的是JPanelJFrame

而且,因为你在paint()方法调用super(你会变成paintComponent),你必须@Override它才能正常工作。

+0

我想继续使用Swing,我将如何使用Swing相当于油漆?谢谢你的帮助,尼克。 – 2013-03-24 15:13:47

+1

@NickHaughton'paintComponent'是'Swing'。 – syb0rg 2013-03-24 15:14:30

+0

我实现了你所建议的代码更改,但是我仍然得到相同的错误: [这是更新的代码](http://pastebin.com/9TLP1q11) – 2013-03-24 15:26:22