2

解決できない奇妙な問題に直面しています。JFrameクラスには2つのクラスがあります。

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クラスを追加してみました。うまくいきませんでした。私はしばらくの間この問題に困惑してきました、そしてあなたの誰かが助けることができるかどうか疑問に思います、

ありがとう。

4

1 に答える 1

2

、、、およびJなどで始まるクラス。_ メソッドはクラスで使用されますが、 sとsを使用しています。JAppletJFrameSwingAppletFrameAWTpaint()AWTJPanelJFrame

また、メソッド(に変更します)を呼び出すためsuper、メソッドが正しく機能するようにする必要があります。paint()paintComponent@Override

于 2013-03-24T14:29:03.507 に答える