我遇到了一个我无法解决的奇怪问题。我有两个类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,但Board类中的图形不会出现。我一直在寻找这个问题的答案而找不到答案。我注意到,当我调整JFrame的大小时,出现了来自棋盘类的图像。这让我相信我必须更新电路板类才能获得图形。我尝试在我的JFrame类中添加一个定时器循环,每1/2秒添加一次Board类。它没用。我已经被这个问题困扰了一段时间,我想知道你们中是否有人可以提供帮助,
感谢。
答案 0 :(得分:2)
以J
开头的类JApplet
和JFrame
为Swing
,Applet
和Frame
为AWT
。方法paint()
与AWT
类一起使用,但您使用的是JPanel
和JFrame
。
另外,因为您在super
方法中调用了paint()
(您将更改为paintComponent
),所以您必须@Override
才能正常使用。