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

By | 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()メソッドで再描画してもちらつきが無い。
画面のクリアも自動的にやってくれるようだ。

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


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

  1. ピンバック: blog lesson 01 - Swing復習 その(3) スクロールペイン

コメントを残す

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