如何每秒将图像绘制到一帧?

时间:2013-07-31 21:10:14

标签: java image swing jframe

到目前为止,这就是我所拥有的一切。我已经阅读了有关绘制和创建图像的oracle文档,但我仍然无法弄明白。

        final BufferedImage image = ImageIO.read(new File("BeachRoad_double_size.png"));

    final JPanel pane = new JPanel();

    frame.add(pane);


    int delay = 1000; //milliseconds
    ActionListener taskPerformer = new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            Graphics gg = image.getGraphics();
            System.out.println("sdfs");
            pane.paintComponents(gg);
            //g.drawImage(image, 0, 0, null);
        }
    };
    new Timer(delay, taskPerformer).start();

1 个答案:

答案 0 :(得分:3)

  1. 绘画是Swing框架的责任。它决定应该绘制什么,何时以及绘制多少。您可以向系统发出请求以执行更新,但由子系统决定何时执行更新。
  2. 您永远不需要直接致电paintComponent,事实上,您永远不需要直接致电paint
  3. 您的示例实际上是将组件绘制到图像中。
  4. 相反。创建一个自定义组件,例如来自JPanel之类的内容,覆盖它的paintComponent方法并在那里执行所有自定义绘画......

    public class ImagePane extends JPanel {
        private BufferedImage bg;
    
        public ImagePane(BufferedImage bg) {
            this.bg = bg;
        }
    
        public Dimension getPreferredSize() {
            return bg = null ? new Dimension(200, 200) : new Dimension(bg.getWidth(), bg.getHeight());
        }
    
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (bg != null) {
                g.drawImage(bg, 0, 0, this);
            }
        }
    }
    

    看看

    了解更多详情

相关问题