Swing/DoubleBuffering のバックアップの現在との差分(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/DoubleBuffering へ行く。
- 1 (2005-12-19 (月) 16:02:40)
- 2 (2006-02-04 (土) 05:42:22)
- 3 (2006-02-27 (月) 15:49:11)
- 4 (2006-04-12 (水) 19:42:00)
- 5 (2006-09-12 (火) 17:24:39)
- 6 (2006-10-18 (水) 17:54:12)
- 7 (2007-02-13 (火) 15:52:26)
- 8 (2007-03-13 (火) 20:34:34)
- 9 (2007-07-10 (火) 12:32:00)
- 10 (2013-09-15 (日) 00:23:04)
- 11 (2014-09-14 (日) 01:15:18)
- 12 (2014-09-30 (火) 00:29:51)
- 13 (2022-08-05 (金) 17:32:59)
- 追加された行はこの色です。
- 削除された行はこの色です。
#navi(../) *DoubleBufferingで自由曲線を描画 [#bc55cccd] >編集者:[[Terai Atsuhiro>terai]]~ 作成日:2005-12-19~ 更新日:&lastmod; --- title: DoubleBufferingで自由曲線を描画 noindex: true pubdate: 2005-12-19T16:02:40+09:00 --- 以前ここに在ったサンプルは修正して、[[JPanelにマウスで自由曲線を描画>Swing/PaintPanel]]に移動しました。 #contents - `Swing`のコンポーネントでは、自動的に`Double Buffering`が行われる -- [https://www.oracle.com/java/technologies/painting.html Painting in AWT and Swing] -- [https://se-ji-cafe.hatenadiary.org/entry/20070306/1173231679 AwtとSwingにおける描画処理 - se-ji-cafe翻訳日記] **概要 [#mba2e720] チラつかないようにDouble Bufferingを行ってパネルにお絵かきします。 自前での`Double Buffering`は、[[JComboBoxのモデルとしてenumを使用する>Swing/SortingAnimations]]のアニメーション部分などを参考にしてみてください。 http://terai.xrea.jp/swing/doublebuffering/screenshot.png **サンプルコード [#cc955806] panel = new JPanel() { public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; if(offImage!=null) g2.drawImage(offImage, 0, 0, this); } }; panel.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { int x = e.getX(); int y = e.getY(); if(offImage==null) { Dimension d = panel.getSize(); int w = d.width; int h = d.height; offImage = (BufferedImage)createImage(w, h); } Graphics2D g2d = (Graphics2D)offImage.createGraphics(); g2d.setStroke(new BasicStroke(3.0F)); g2d.setPaint(Color.black); g2d.drawLine(startX, startY, x, y); g2d.dispose(); startX = x; startY = y; repaint(); } }); panel.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { startX = e.getX(); startY = e.getY(); } }); -[[サンプルを起動>http://terai.xrea.jp/swing/doublebuffering/sample.jnlp]] -[[jarファイル>http://terai.xrea.jp/swing/doublebuffering/sample.jar]] -[[ソース>http://terai.xrea.jp/swing/doublebuffering/src.zip]] **解説 [#t35e18f2] 上記のサンプルでは、マウスリスナを使ってパネル上にお絵かきをしています。この際、チラつかないようにするために、古典的なダブルバッファリングの手法を使っています。 //**参考リンク **コメント [#p0458ab1] #comment