在JPanel中重绘ImageIcon的问题

时间:2016-03-07 16:32:35

标签: java swing

    protected class Racer extends JPanel implements Runnable{
        private int racePos;
        private int frameWidth = trump.getIconWidth()*20;
        private int finalRacePos = frameWidth - 2*trump.getIconWidth();
        private Random jumpRan = new Random();
        public void run() {
            while(racePos < finalRacePos){
                repaint();
                try {
                    TimeUnit.SECONDS.sleep((long)Math.random());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                racePos += jumpRan.nextInt(10);
            }
        }
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            trump.paintIcon(this, g, racePos, 0);
        }
    }
}

当我运行时,王牌图标最初在左侧绘制,但它们从不移动。我究竟做错了什么?我是否从根本上错过了使用Graphics / PaintComponent的东西?

1 个答案:

答案 0 :(得分:0)

我认为你使用的是Thread类(即新的Thread(racer)) 并在UI中使用相同的racer实例。 你也使用thread.start()而不是thread.run()(我见过很多人都犯了这个错误)。

如果以上情况属实: 确保finalRacePos&gt; racePos。调试run方法并确保在增加X坐标的情况下多次调用paint。