0

这就是我到目前为止所拥有的。我已经阅读了有关绘图和创建图像的 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();
4

1 回答 1

3
  1. 绘画是 Swing 框架的职责。它决定应该画什么、何时以及画多少。您可以向系统发出请求以执行更新,但由子系统决定何时执行。
  2. 你应该永远不需要paintComponent直接调用,事实上,你应该永远不需要paint直接调用
  3. 您的示例实际上是将组件绘制到图像上。

反而。创建一个自定义组件,比如从类似的东西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);
        }
    }
}

看一眼

更多细节

于 2013-07-31T21:22:32.260 回答