TITLE:DoubleBufferingで自由曲線を描画

DoubleBufferingで自由曲線を描画

編集者:Terai Atsuhiro
作成日:2005-12-19
更新日:2022-08-05 (金) 17:32:59

概要

チラつかないようにDouble Bufferingを行ってパネルにお絵かきします。

#screenshot

サンプルコード

panel = new JPanel() {
  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    if(offImage!=null) ((Graphics2D)g).drawImage(offImage, 0, 0, this);
  }
};
panel.setBorder(BorderFactory.createEmptyBorder());
panel.addMouseMotionListener(new MouseMotionAdapter() {
  public void mouseDragged(MouseEvent e) {
    Point p = e.getPoint();
    if(offImage==null) {
      offImage = (BufferedImage)createImage(getWidth(), getHeight());
    }
    Graphics2D g2d = (Graphics2D)offImage.createGraphics();
    g2d.setStroke(new BasicStroke(3.0F));
    g2d.setPaint(Color.black);
    g2d.drawLine(startPoint.x, startPoint.y, p.x, p.y);
    g2d.dispose();
    repaint();
    startPoint = e.getPoint();
  }
});
panel.addMouseListener(new MouseAdapter() {
  public void mousePressed(MouseEvent e) {
    startPoint = e.getPoint();
  }
});
  • &jnlp;
  • &jar;
  • &zip;

解説

上記のサンプルでは、マウスリスナーを使ってパネル上にお絵かきをしています。

画面がチラつかないようにするためによく使われるダブルバッファリングの手法を使っています。

コメント

  • Swingでは自動的にダブルバッファリングしてくれるはずなので、このTipは実は意味がありません。AWTのPanelなどの場合のテクニックなので、そのうちページを消すかもしれません。 -- terai