0

これは私がこれまで持っているすべてです。画像の描画と作成に関するオラクルのドキュメントを読みましたが、まだわかりません。

        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 に答える