Swing/DoubleBuffering のバックアップソース(No.11)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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)
//TITLE:DoubleBufferingで自由曲線を描画 `Swing`のコンポーネントでは自動的に`Double Buffering`が行われるため、意味のないサンプルになっていました。 - 参考 //-- [http://java.sun.com/products/jfc/tsc/articles/painting/ Painting in AWT and Swing] -- [http://www.oracle.com/technetwork/java/painting-140037.html Painting in AWT and Swing] -- [http://d.hatena.ne.jp/se-ji-cafe/20070306/1173231679 se-ji-cafe翻訳日記 - AwtとSwingにおける描画処理] 以前ここに在ったサンプルは修正して、[[JPanelにマウスで自由曲線を描画>Swing/PaintPanel]]に移動しました。 自前での`Double Buffering`は、[[JComboBoxのモデルとしてenumを使用する>Swing/SortingAnimations]]のアニメーション部分などを参考にしてみてください。 //* DoubleBufferingで自由曲線を描画 [#bc55cccd] //Posted by &author(aterai); at &time(2005-12-19); // //#contents // //** 概要 [#mba2e720] //チラつかないようにDouble Bufferingを行ってパネルにお絵かきします。 // // //** サンプルコード [#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(); // } // }); // //////- &zip; // //** 解説 [#t35e18f2] //上記のサンプルでは、マウスリスナーを使ってパネル上にお絵かきをしています。 // //画面がチラつかないようにするためによく使われるダブルバッファリングの手法を使っています。 // //** 参考リンク [#b81f9b54] //- [http://java.sun.com/products/jfc/tsc/articles/painting/#swing Painting in AWT and Swing] // //** コメント [#p0458ab1] //- Swingでは自動的にダブルバッファリングしてくれるはずなので、このTipは実は意味がありません。AWTのPanelなどの場合のテクニックなので、そのうちページを消すかもしれません。 -- [[aterai]] &new{2006-10-18 (水) 17:54:12}; // //#comment