TITLE:DoubleBufferingで自由曲線を描画
#navi(../)
*DoubleBufferingで自由曲線を描画 [#bc55cccd]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2005-12-19~
更新日:&lastmod;

#contents

**概要 [#mba2e720]
チラつかないようにDouble Bufferingを行ってパネルにお絵かきします。

#screenshot

**サンプルコード [#cc955806]
 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;

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

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

**参考リンク [#b81f9b54]
-[[Painting in AWT and Swing>http://java.sun.com/products/jfc/tsc/articles/painting/#swing]]

**コメント [#p0458ab1]
- Swingでは自動的にダブルバッファリングしてくれるはずなので、このTipは実は意味がありません。AWTのPanelなどの場合のテクニックなので、そのうちページを消すかもしれません。 -- [[terai]] &new{2006-10-18 (水) 17:54:12};

#comment