【Java】Swing復習 その(2) マウスの軌跡を描画するプログラム

投稿者: | 2011年4月14日

C#やAndroidでも同じようなことをするアプリはすぐ作れるのだが、Swingではどうやるのかが気になったのでメモしておく。

Swingでマウスの軌跡を描画するサンプル

MyCanvas.java

public class MyCanvas extends JComponent {

    private static final long serialVersionUID = 1L;
    private final List<Point> points = new ArrayList<Point>();

    public MyCanvas(){
        super();

        // MouseMotionListenerを使えばドラッグ処理を簡単に書ける
        addMouseMotionListener(new MouseMotionListener() {

            @Override
            public void mouseMoved(MouseEvent e) {

            }

            @Override
            public void mouseDragged(MouseEvent e) {

                points.add(new Point(e.getX(),e.getY()));

                // 画面を再描画する
                repaint();
            }
        });
    }

    // paintComponentは標準でダブルバッファが有効である
    // 画面を消去する必要は無い。
    @Override
    protected void paintComponent(Graphics g) {

       for(Point p : points){
           g.drawRect(p.x, p.y, 1, 1);
       }
    };
}

Main.java

public class Main {

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                final JFrame frame = new JFrame();
                frame.setBounds(100, 100, 400, 300);
                frame.setLocationRelativeTo(null);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.getContentPane().add(new MyCanvas());
                frame.setVisible(true);
            }
        });
    }
}

Swingならではのポイントとしては、MouseMotionListenerを使えばドラッグ処理を簡単に書けることが分かった。
また、JComponentのpaintComponent()は標準でダブルバッファが有効であるようで、repaint()メソッドで再描画してもちらつきが無い。
画面のクリアも自動的にやってくれるようだ。

実行すると下のようになる。

【Java】Swing復習 その(2) マウスの軌跡を描画するプログラム」への1件のフィードバック

  1. ピンバック: 【Java】Swing復習 その(3) スクロールペイン – ザワプロ!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です