Java �O���t�B�b�N�X

�ڎ�

���ǂ�


�O���t�B�b�N�X�̊�{

�O���t�B�b�N�X�p�̃E�B���h�E��p�ӂ��AGraphics �N���X�̕`��p�e�탁�\�b�h���Ăяo���Ď��s���邱�Ƃɂ��A�O���t��\�����邱�Ƃ��o����B

�E�B���h�E��\������

�E�B���h�E�́A�u���E�U�𗘗p���邩�A Frame �N���X�̃T�u�N���X���쐬����B

�E�B���h�E�\�����̂P�@�u���E�U�𗘗p����F�A�v���b�g

�ȈՃA�v���P�[�V�������Ӗ������A�v���b�g���쐬����ƁA�u���E�U���E�B���h�E����ɂ��邱�Ƃ��o����B�A�v���b�g�r�����[�ƌĂ΂��d�|�����g���āA�u���E�U�ɕ\���������ꍇ�̗l�q���v���r���[���邱�Ƃ��o����B

�A�v���b�g�� Applet �N���X���p�������T�u�N���X���`���邱�ƂŎ��s�ł���Bpaint() ���\�b�h���I�[�o�[���C�h���āAGraphics �N���X�̊�{�}�`��`�悷�郁�\�b�h��g�ݍ��킹�ĕ\������B���͂��̍��ł���B

public class MyApplet extends Applet {
	public void paint(Graphics g) {
		g.drawString("Hello Java!", 150, 100);
		g.fillOval(100, 150, 200, 100);
		g.setColor(Color.WHITE);
		g.fillRect(150, 175, 100, 50);	
} }

extends Applet �� Applet �N���X���p�������T�u�N���X���`���Ă���BdrawString() �͕������\������AfillOval() �͒���h��‚Ԃ����ȉ~��`���AsetColor() �͕`��̐F���w�肷��AfillRect() �͒���h��‚Ԃ��������`��`�� Graphics �N���X�̃��\�b�h�ł���B

���s����ƁA��ʍ���Ɂu�A�v���b�g�v�Ƃ����^�C�g���̏����ȃE�B���h�E���\������A����ɁuHello Java!�v�Ƃ��������񂪕\������A���̉��Ɉꕔ�����������ꂽ�����ȉ~�i�̈ꕔ�j���\�������B�A�v���b�g�r���A�[�̃f�t�H���g�̃E�B���h�E�T�C�Y�� 200 x 200 �Ȃ̂ŁA�\�����S�������Ȃ��ꍇ�́A��ʉE�����h���b�O����Ή�ʂ̑傫����ς��邱�Ƃ��o����B�u�‚���v�{�^�����N���b�N����ƏI������B

�E�B���h�E�\�����̂Q�@�t���[�����쐬����FFrame, JFrame

Frame �N���X���p�������T�u�N���X�����A���̃C���X�^���X���쐬���Ď��s�����邱�Ƃɂ��A�����̃E�B���h�E��\�������邱�Ƃ��o����B�A�v���b�g�̏ꍇ�ɔ�ׂāA�T�C�Y�����߁A������u������v������A�Ƃ����]�v�ȍ�Ɓi�R���X�g���N�^�j���K�v�ɂȂ�B�܂��A�v���O�����𓮂������߂� main() ���\�b�h�̒�`���K�v�ɂȂ�B���͂��̍��ł���B

class MyFrame extends Frame {
	// �R���X�g���N�^
MyFrame() { this.setSize(400, 300); // �E�B���h�E�̑傫����ݒ�i�� x �c�A�r�b�g���j this.setVisible(true); // �E�B���h�E��\������ } // �ŏ��Ɏ��s����郁�\�b�h
public static void main(String[] args) { new MyFrame(); } // paint ���\�b�h�̏������� public void paint(Graphics g) { g.drawString("Hello Java!", 150, 100); // ������\�� g.fillOval(100, 150, 200, 100); // �h��‚Ԃ��ȉ~�i�f�t�H���g�͍��F�j g.setColor(Color.WHITE); // �\���F�̐ݒ� g.fillRect(150, 175, 100, 50); // ���������` }
}

extens Frame �� Frame �N���X���p�������T�u�N���X���`���Ă���BsetSize() �ŃE�B���h�E�̑傫�����w�肵�AsetVisible() �ŃE�B���h�E��\�����Ă���Bmain() ���\�b�h�ł́A���̃N���X�̃C���X�^���X���쐬���Ă���inew MyFrame()�j�B

���s���ʂ̓A�v���b�g�̏ꍇ�Ɠ����ł���B���̃N���X�ɂ̓E�B���h�E�́u�‚���v�{�^�����N���b�N�������̏�������`����Ă��Ȃ��̂ŁA�u�‚���v�{�^�����N���b�N���Ă������������Ȃ��B

�`��̎菇�͈ȉ��̒ʂ�Bpaint() ���\�b�h�����s����O�� repaint() ���\�b�h�i�`�������j���Ăяo����A����update() ���\�b�h�i�������j�A�Ō�� paint() ���\�b�h���Ăяo����āA���ۂ̊G��`���B�܂��A�E�B���h�E�T�C�Y���ς������A�ʂ̃E�B���h�E�̉��ɂȂ��āA�ĂёO�ʂɕ\�������ȂǁA�E�B���h�E�̍ĕ`�悪�K�v�ɂȂ�ƁArepaint() - update() - paint() �ɏ��ŏ�ɌĂяo�����Brepaint(), update() �́A�ʏ�͓Ǝ��ɕt�������邱�Ɓi�I�[�o�[���C�h�j�͂Ȃ��̂ŁA�v���O�����ɏ����K�v�͂Ȃ��B


�`��̂��߂̃��\�b�h�iGraphics �N���X�j

��{�I�Ȑ}�`�╶�����\�����邽�߂ɁAGraphics �N���X�ɗl�X�ȃ��\�b�h���p�ӂ���Ă���BdrawXxx() �͊O�`���AfillXxx() �͓�����h��‚Ԃ��A�Ƃ����Ⴂ������B

���\�b�h�� ���� �@�@ ���\�b�h�� ����
drawLine ���������� drawRect, fillRect �����`
drawPolyline �܂�������� drawRoundRect, fillRoundRect �p�̊ۂ������`
drawString �������\������ drawPolygon, fillPolygon ���p�`
clearRect �w�i�F�̒����`�i�����j drawOval, fillOval �~�A�ȉ~
setColor(Color)
�y���̐F��ݒ�A�擾 drawArc, fillArc �~��
setFont(Font) �t�H���g�̐ݒ� draw3DRect, fill3DRect ���̒����`�i�����́j

���̑��ɁA����̈�̃r�b�g�}�b�v�����R�s�[���� copyArea()�Aimage �I�u�W�F�N�g��\������ drawImage() �Ȃǂ��g����Bcreate() �́A�w�肵�������`�̈�̕`��p�I�u�W�F�N�g�𐶐�����Bdispose() �͎g�p���̃V�X�e�����\�[�X���������Bpaint() ���\�b�h���g��Ȃ��ꍇ�ɃS�~���������邽�߂̃��\�b�h�B

���ǂ�


���W�n

�}�`�╶���́A�\���ʒu���w�肷�邽�߂ɁA���߂�ꂽ���W�n��p����B�\���̈�i�E�B���h�E�j�͒����`�ŁA��������_�A���������� x ���A���������� y ���A�E���A�����𐳕����Ƃ��A�s�N�Z���P�ʁiint �^���j�Ŏw�肳���B
�\���̈�̑傫����\�����߂ɁAint �^�����‘g�ݍ��킹�� Dimension �^������B��‚̐��� width, height �ɂ���ĎQ�Ƃ��邱�Ƃ��o����iDimension.width, Dimension.height�j�B

�A�v���b�g��t���[�����`����Ƃ��A�\���̈�̉����iwidth�j�ƍ����iheight�j���s�N�Z�����Ŏw�肵�� setSize() ���\�b�h���g���B���Ƃ��΁AsetSize(800,600); �isetSize(new Dimension(800, 600)); �Ƃ��Ă������j�́A������ 800 �s�N�Z���A�c���� 600 �s�N�Z���̉�ʂ�ݒ肷��B

���ݎg���Ă����ʂ̉��A�c�̑傫���i�s�N�Z�����j�� this.getWidth(), this.getHeight() �ɂ���Ēm�邱�Ƃ��o����B

Frame ���p�������N���X���`�����ꍇ�A�\�������E�B���h�E�̓^�C�g���o�[�Ƃ��ďォ��30�s�N�Z���A���̘͂g�Ƃ��� 8 �s�N�Z���g���Ă���̂ŁA���ۂɎg�����ʂ́A���オ (8, 30)�A�E���� (this.getWidth()-8, this.getHeight()-8) �͈̔͂ł���B

�����`��~�Ȃǂ̐}�`��`���ꍇ�A��������N�_�ƂȂ�B����̍��W�i(x,y)�j�ƁA�}�`�̑傫���iDimension(width,height)�j���w�肷��B�������\������ꍇ�́A���������N�_�Ƃ��钷���`�̈�ɕ`�����B

���w�֐����g���Ƃ��Ay �����������]���Ă���̂ŁA���ӂ��K�v�ł���B�Ⴆ�΁A�_ (Math.cos(t), Math.sin(t)) �́At �𑝉��������Ƃ��A�i�����v���ł͂Ȃ��j���v���ɓ����B

���ǂ�


�A�j���[�V����

�A�j���[�V�����́A���Ԋu�ʼn�ʂ��������•`���ς��邱�Ƃɂ���ē�����\������B�������[�v������āApaint() ���J��Ԃ��ĂׂΗǂ��B

���̃v���O�����́A�{�[�����]����l�q�������������̂ł���B

public class TestAnim extends Frame {
	int x = 0;

	TestAnim() {
		this.setSize(400, 300);
		setVisible(true);
		run();				// �A�j���[�V�����J�n
	}
	public static void main(String[] a) {
		new TestAnim();
	}
	public void run() {
		while (true) {			// �������[�v
			x = x + 1;
			if (x > 400) x = 0;
			repaint();		// ��ʍX�V
			try {
				Thread.sleep(10); // ��ʍX�V�Ԋu�w��
			} catch (Exception e) { }
		}
	}
	public void paint(Graphics g) {
		g.drawOval(x, 100, 50, 50);	// ���ۂ̉摜
	}
}

���̃v���O���������s����ƁA�~�Ղ�������E�֓]�����Ă���悤�Ɍ�����B

�v���O�����̉���F

�v���O������������ƁApaint() ���\�b�h�ɂ���ĉ~���d�Ȃ��ĕ`�悳���悤�Ɍ����邪�Apaint() ���\�b�h�͎��s����O�� repaint(), update() ���\�b�h�����s���Ă��������ʂ��N���A���Ă���A�����ɕ`����Ă��郁�\�b�h�����s����̂ŁA���O�܂ŕ`����Ă����~�͏�������A�V���ɕ`���ꂽ�~�������\�������B
���̌��ʂƂ��āA�O�̈ʒu���班�������������~���\�������̂ŁA�����Ă��邩�̂悤�Ɍ�����B�Ⴆ�΁A paint() ���\�b�h�̒��� g.drawOval(x, x, 30, 30); ��lj�����ƁA���ォ��E���֓������U��̉~�������ɕ\�������Bpaint() ���\�b�h�̍H�v�Ŗނ��炵�������������邱�Ƃ��”\�����A�������~�߂���A�r������lj������肷��Ƃ������G�Ȃ��Ƃ��������悤�Ƃ���ƁA�ʂ̎d�|�����K�v�ł���B

Thread.sleep() ���\�b�h�Ŏg��ꂽ�X���b�h Thread �̍l����������ł���B

�X���b�h

�R���s���[�^�ŁA����d�������s���邽�߂̈�A�̏����P�ʂ̓X���b�h�ithread of execution�j�ƌĂ΂��B�P��ړI�̃v���O�����ł̓X���b�h����Ɉӎ����邱�Ƃ͂Ȃ����A���s��������K�v������ꍇ�́A�����̃X���b�h�𓯎��Ɏ��s������ꍇ������B�v�Z�����s����CPU�͈�‚��������̂ŁACPU���Ԃ����������Ċe�X���b�h�����Ԃɏ������邱�ƂɂȂ�B

�v���O�������F���̃v���O�����͎O�‚̃X���b�h�𓯎��ɓ���������ł���B

public class MyThread {
	public static void main(String[] args) {
		new SecondThread().start();
		new ThirdThread().start();
		for(int i=0; i<10; i++) {
			System.out.println("�X���b�h�P�F" + i);
			try {
				Thread.sleep(500);
			} catch(Exception e){};
		}
	}
}
class SecondThread extends Thread {
	public void run() {
		for(int i=0; ii<10; i++) {
			System.out.println("�@�@�@�@�@�X���b�h�Q�F" + i);
			try {
				Thread.sleep(500);
			} catch(Exception e){};
		}
	}
}
class ThirdThread extends Thread {
	public void run() {
		for(int i=0; ii<10; i++) {
			System.out.println("�@�@�@�@�@�@�@�@�@�@�@�X���b�h�R�F" + i);
			try {
				Thread.sleep(500);
			} catch(Exception e){};
		}
	}
}

�v���O�����̉���F

�v���O�����̎��s��́A�Ⴆ�Ύ��̂悤�ɂȂ�B
�@�@�@�@�@�X���b�h�Q�F0
�X���b�h�P�F0
�@�@�@�@�@�@�@�@�@�@�@�X���b�h�R�F0
�@�@�@�@�@�X���b�h�Q�F1
�X���b�h�P�F1
�@�@�@�@�@�@�@�@�@�@�@�X���b�h�R�F1
�@�@�@�@�@�@�@�@�@�@�@�X���b�h�R�F2
�X���b�h�P�F2
�i�ȉ��@�ȗ��j
���̗�ł́A3�‚̃X���b�h���A2, 1, 3, 1, 2, 3, 3, 2, 1, 3, 1, 2, 1, 2, 3, 2, 1, 3, 1, 3, 2, 2, 1, 3, 2, 3, 1, 2, 3, 1 �̏��Ɏ��s���ꂽ���A���̏����͎��s���邽�тɈႤ�”\��������B

Runnable �����������X���b�h�̎��s

�X���b�h���~������A�V�K�ɊJ�n�������肷�邽�߂ɂ́AThread �N���X���p�������T�u�N���X�����Arun() ���\�b�h���I�[�o�[���C�h���Await(), sleep() ���\�b�h��g�ݍ��킹�Đ���̎d�g�݂����B���邢�́AThread �N���X�̃C���^�[�t�F�[�X�ł� Runnable ����������B

�A�j���[�V�������̂��̂́A��̃v���O�����ᓯ�l�Arun() ���\�b�h�̒��ɖ������[�v�����A���̒��� repaint() ���\�b�h�����s����B

Runnable �C���^�[�t�F�[�X���g�����v���O��������邽�߂̊�{�菇�͎��̒ʂ�B

  1. Runnable �C���^�[�t�F�[�X��������(implements)
  2. run ���\�b�h��g�ݍ��݁A
  3. run ���\�b�h�̒��ŁA��ʂ̕`���ς��������[�`���ƁA�ꎞ��~�p�� Thread.sleep() ��g�ݍ��݁A
  4. Thread(this).start() ���\�b�h�����s����

�v���O������

public class TestThread extends Frame implements Runnable {
	int x = 0;

	TextThread() {
		this.setSize(400, 300);
		setVisible(true);
		// ���̃v���O�������X���b�h�Ƃ��Ď��s�J�n����
		new Thread(this).start();
	}
	public static void main(String[] a) {
		new TestThread();
	}
	public void run() {
		while (true) {
			x = x + 1;
			if (x > 400) x = 0;
			repaint();
			try {
				Thread.sleep(10);
			} catch (Exception e) {
			}
		}
	}
	public void paint(Graphics g) {
		g.drawOval(x, 100, 50, 50);
	}
} 

���̃v���O���������s����ƁA�~��������E�֓]����A����Ƃ���܂ōs�����獶�[�ɖ߂�A�Ƃ����ȒP�ȃA�j���[�V�������\�������B���̗�̂悤�ɁA�P�񐫂̂��̂ł���΁ARunnable ���������Ȃ��ŏ��̃v���O������ƂقƂ�Ǖς��Ȃ��B���ہA�ύX�����̂́ARunnabale ���������āA�R���X�g���N�^�� run() �̑���� new Thread(this).start(); �Ə��������������ł���Brun() �� Runnable �C���^�[�t�F�[�X�Ɋ܂܂�郁�\�b�h���I�[�o�[���C�h�������̂Ƃ݂Ȃ���Astart() �ɂ���ĊJ�n����邩��A���ڌĂяo���K�v�͂Ȃ��B

�v���O�����̐����F


Thread �N���X���p�������X���b�h�̎��s

Thread �N���X���p�������T�u�N���X�����A���̃C���X�^���X��g�ݍ��ނ��Ƃɂ���ăX���b�h�����s���邱�Ƃ��o����B

��{�菇�͎��̒ʂ�B

  1. Thread ���p�������T�u�N���X�����irun()���\�b�h��g�ݍ��ށj�A
  2. ���C���v���O�����ŁA���̃T�u�N���X�̃C���X�^���X����邱�Ƃɂ��A�X���b�h�����s����

�v���O������

public class TestAnim extends Frame {
	int x = 0;

	TestAnim() {
		this.setSize(400, 300);
		setVisible(true);
		new MyThread(this, 0);
		new MyThread(this, 200);
	}
	public static void main(String[] a) {
		new TestAnim();
	}
	public void redraw(int x) {
		this.x = x;
		repaint();
	}
	public void paint(Graphics g) {
		g.drawOval(x, 100, 50, 50);
	}
}
class MyThread extends Thread {
	int x;
	TestAnim ta;
	MyThread(TestAnim ta, int x) {
		this.ta = ta;
		this.x = x;
		new Thread(this).start();
	}
	public void run() {
		while (true) {
			x = x + 1;
			if (x > 400) x = 0;
			ta.redraw(x);
			try {
				Thread.sleep(10);
			} catch (Exception e) { }
		}
	}	
}

�v���O���������s����ƁA��‚̉~��������E�Ɂi��]���Ȃ���j�ړ�����l�q���ώ@�ł���B

�v���O�����̐����F

new MyThread �����s����ƁA�w�肳�ꂽ�ʒu����~�����������A�j���[�V�������i��‚̃X���b�h�Ƃ��āj�\�������B�ʂ̏������W��^���Ă���� new MyThread �����s����ƁA�V���ȉ~�̃A�j���[�V�������ʂ̃X���b�h�Ƃ��ăX�^�[�g����B�X���b�h�X�^�[�g�̃^�C�~���O�𐧌䂷��d�g�݁i�Ⴆ�΁A�ꎞ��~������A�}�E�X���N���b�N�����ʒu����A�j���[�V�������n�߂�Ȃǁj����荞�߂΁A��蕡�G�ȃA�j���[�V�������ł���B

�X���b�h�̈ꎞ��~�A�ĊJ

�X���b�h���ꎞ���f�����΂����Await() �����s����B�ĊJ�������ꍇ�́A���̎��s���~�����邽�߂� notify() �Ƃ������\�b�h�����s����B�����̊Ԃɂ͓������Ƃ�Ă��邱�Ƃ��K�v�Ȃ̂ŁAsynchronized ������^����K�v������B

�v���O������

public class ThreadPauseResume extends Frame implements Runnable, ActionListener {
	int x = 100;
	boolean pause = false; // �x�~��Ԃ��ۂ����L������_���ϐ�

	ThreadPauseResume() {
		this.setSize(400, 300);
		// �ꎞ��~�A�ĊJ���g���邽�߂̓`�B��i�i�{�^���N���b�N�ő���j
		Button bpause = new Button("pause");
		bpause.addActionListener(this);
		this.add(bpause, BorderLayout.NORTH);
		Button bresume = new Button("resume");
		bresume.addActionListener(this);
		this.add(bresume, BorderLayout.SOUTH);
		this.setVisible(true);
		new Thread(this).start();
	}
	public static void main(String[] a) {
		new ThreadPauseResume();
	}
	public void run() {
		while(true) {
			// �ꎞ��~��ԂłȂ��ꍇ�̂݁A�ĕ`����s
			if (!pause) {
				x = x + 1;
				if(x > 400) x = 0;
				repaint();
			}
			try {
				Thread.sleep(10);
				// �x�~��ԁipause=true�j�Ȃ�΁A�������Ȃ��Łu�҂v
				synchronized(this) {
					while(pause) wait();
				}
			} catch(Exception e) { }
		}
	}
	// �ĊJ�{�^�����N���b�N���ꂽ���Ƃ�m�点��
	public synchronized void myResume() {
		notify();
	}
	public void paint(Graphics g) {
		g.drawOval(x, 100, 50, 50);
	}
	// �{�^�����N���b�N���ꂽ�Ƃ��̏������`����
	public void actionPerformed(ActionEvent ae) {
		pause = !pause;
		if (ae.getActionCommand() == "resume") {
			myResume();
		}
	}
}

�v���O���������s����ƁA�{�^�����N���b�N���邱�Ƃŋʂ̓������~�܂�����ĊJ������A�Ƃ����������������Ă��邱�Ƃ��m���߂���B

�v���O�����̐����F

�X���b�h�̕ʂ̗�F�����R�����g������\��

����̃R�����g�̂悤�ɁA�������������E�ֈړ����Ȃ���\������v���O�����̗�ł���B
Label �� Runnable �C���^�[�t�F�[�X���������A���̕\���ʒu���������‰E�ɂ��炷���Ƃɂ��A�\������郉�x���̕����񂪉E�Ɉړ����Ă����A�j���[�V�������������Ă���B��‚� Label �������_���ɐ�������Ă���E�[�ɏ����Ă����܂ł���‚̃X���b�h�Ƃ��Ă���B�E�[�ɏ������Ƃ��A�X���b�h�͒�~����B

public class MovingComment extends Frame implements Runnable {

	int id = 0;
	Dimension dim = new Dimension(800, 600);

	MovingComment(String title) {
		this.setSize(dim);
		this.setTitle(title);
		setLocationRelativeTo(null);
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent we) { System.exit(0); }
		});
		this.setVisible(true);
		new Thread(this).start();
	}

	public static void main(String[] a) {
		new MovingComment("�����R�����g");
	}

	// �V�K�R�����g�̐����i�P�b�Ԃɕ��ςP�����j
	public void run() {
		while (true) {
			if (Math.random() < 0.1) {
				id++;
				int y = id * 40 % (dim.height - 100) + 40;
				Comments com = new Comments(id, y, dim.width);
				add(com);
			}
			try {
				Thread.sleep(100);
			} catch (Exception e) {}
		}
	}

	public void update(Graphics g) {
		paint(g);
	}
}
// Label �N���X�̊g���A�V�K���x���̐���
class Comments extends Label implements Runnable {
	boolean runn = true;
	int id;
	int x, y, width = 100, height = 30, WD;
	String[] comm = {"excellent", "good", "enough", "passably", "miserable", 
		"stupid", "no comment", "amazing", "fantastic", "funny", "OK", 
		"not too bad", "boring", "trash"};
	int NC = comm.length;

	Comments(int id, int y, int WD) {
		this.id = id;
		this.WD = WD;
		this.y = y;
		x = 0;
		// �R�����g���X�g�����‚������_���ɑI��
		this.setText(comm[(int)(Math.random()*NC)]);
		this.setBounds(x, y, width, height);
		new Thread(this).start();
	}

	// ��ʂ���O���܂Łi���� WD�j�E�ւ��炵�Ȃ���\������
	public void run() {
		while (runn) {
			this.setBounds(x++, y, width, height);
			if (x > WD)
				runn = false;
			try {
				Thread.sleep(10);
			} catch (Exception e) {}
		}
	}
}

���ǂ�


����‚��h�~

�A�j���[�V�����̂悤�ɕp�ɂɕ`���ς���ipaint() ���Ăԁj�ƁA��ʂ�����‚��āA���ɂ����B����́Apaint() ���\�b�h�����s����ꍇ�ɁA�iupdate() ���\�b�h�����s���āj��ʂ���������������Ă���V���ȃO���t�B�b�N�X��`�����ގd�g�݂ɂȂ��Ă��邩��ł���B�������������‚̕��@�������B

update() ��������

paint() ���\�b�h���ĂԂƁA���̑O�����Ƃ��� update() �����s���邱�ƂɂȂ��Ă���A�����ʼn�ʂ̏����������s����B��ʏ��������������Ȃ����߂ɂ́Aupdate() ���o�C�p�X����悤�ɏ����ς��Ă��܂��΂悢�B

public void paint(Graphics g) {
	...
}

public void update(Graphics g) {
	paint(g);
}

�������A�������邱�Ƃɂ���āA���O�Ɏ��s���ꂽ paint() �̓��e�͉�ʂɎc���Ă���̂ŁA�A�j���[�V�����̂悤�ɉ摜���������“������悤�ȕ`����J��Ԃ��ꍇ�́A�O�Ղ��S���c���Ă��܂��B���O�ɕ`�����摜���c�����������͍�҂̐ӔC�ɂȂ�B�O�̉摜������������� clearRect() �����s����Ηǂ��B

�_�u���o�b�t�@�����O

paint() ���g���ƁA�`��ߒ������ׂĕ\������Ă���X�N���[����Ŏ��s����邽�߁A����‚��̌����ɂȂ�B�ڂɌ����Ȃ��A����Ή��z�X�N���[���ŕ`�悵�A�����}������\��������悤�ɂ���΁A���X�N���[���̕`�������͈��ł��ނ��Ƃ���A����‚��͏��Ȃ��Ȃ邱�Ƃ����҂ł���B

�ڂɌ����Ȃ����z�X�N���[���̓C���[�W�t�@�C���𗘗p���邱�ƂŎ����ł���BImage �N���X�̃C���X�^���X�� Graphics �̃��\�b�h���g���ĕ`�悵�AdrawImage() ���\�b�h���g���Ă��̉��z�X�N���[������x�ɕ`���B

	// �C���[�W�t�@�C����p�ӂ���
	Image img = null;
	Graphics g;

	// �O���t�B�b�N�X
	public void paint(Graphics gr) {
		super.paint(gr);
		if (img == null) {					// �C���[�W�t�@�C���̏�����
			D = new Dimension(this.getSize());
			img = this.createImage(D.width, D.height);	// �`��p���z�X�N���[�����m��
			g = img.getGraphics();				// ���ۂ̕`��p Graphics 
		}
		gr.drawImage(img, 0, 0, this); 				// ���z�X�N���[����\�ɕ\��
	}
	// ����‚��h�~
	public void update(Graphics g) {
		paint(g);
	}
  // ���ۂ̎g�p�� public void draw() { g.drawOval(100, 100, 200, 100); repaint(); }

�_�u���o�b�t�@�����O�ŕ`�悷��v���O���������菇���܂Ƃ߂�ƁA�ȉ��̂悤�ɂȂ�B

  1. Image �̃C���X�^���X�����AcreateImage() ���\�b�h�ʼn��z�E�B���h�E�̑傫����ݒ肷��
  2. Graphics �̃C���X�^���X�����A�`�悷��E�B���h�E�����z�E�B���h�E�ɐݒ肷��
  3. ���̉��z�E�B���h�E�ɕK�v�Ȑ}�`��`������
  4. paint() ���\�b�h�� drawImage() ���\�b�h��g�ݍ���
  5. �ĕ`�悳�������ꍇ�� repaint() ���ߕ�������

��ʂ̃X�N���[���\��

�C���[�W�t�@�C�����g���ƁAcopyArea ���\�b�h�𗘗p���ĉ�ʕ\���𕽍s�ړ��i�X�N���[���j�����邱�Ƃ��o����B�ucopyArea(x,y,w,h,xx,yy)�v�́A������W�� (x, y) �̑傫�� w x h �̉�ʂ��A������W�� (xx, yy) �ƂȂ�ʒu�ɃR�s�[�y�[�X�g���郁�\�b�h�ł���B�����������ɂ���c������������΃X�N���[�������悤�Ɍ�����B
���̃v���O�����́A�}�E�X�z�C�[���̓����ɉ����ĉ�ʂ��㉺�ɃX�N���[������@�\�������ꂽ�O���t�B�b�N�p�̃p�l���̗�ł���B

�v���O�������F

public class MyMouseEvent3 extends Frame {
	Graphics g;
	Dimension dim;						// �E�B���h�E�̑傫���w��
	Point prev, now = new Point(0,0);			// �}�E�X�ʒu���L��
	
	MyMouseEvent3() {
		this.setSize(400, 400);
		this.addMouseListener(new MyMouseAdapter());
		this.addMouseMotionListener(new MyMouseMotionAdapter());
		this.addMouseWheelListener(new MyMouseWheelListener());
		this.setVisible(true);
		g = this.getGraphics();
		dim = this.getSize();
	}
	public static void main(String[] args) {
		new MyMouseEvent3();
	}
	// �}�E�X�N���b�N���̏���
	class MyMouseAdapter extends MouseAdapter {
		public void mouseClicked(MouseEvent me) {
			Point p = me.getPoint();
			g.drawLine(p.x - 5, p.y, p.x + 5, p.y);
			g.drawLine(p.x, p.y - 5, p.x, p.y + 5);
		}
	}

	// �}�E�X�h���b�O���̏���
	class MyMouseMotionAdapter extends MouseMotionAdapter {
		public void mouseDragged(MouseEvent me) {
			prev = now;
			now = me.getPoint();
			if(Math.abs(prev.x-now.x) + Math.abs(prev.y-now.y) > 20) prev = now;
			g.drawLine(prev.x, prev.y, now.x, now.y);
		}
	}
	// �}�E�X�z�C�[����]���̏���
	class MyMouseWheelListener implements MouseWheelListener {
		public void mouseWheelMoved(MouseWheelEvent me) {
			int rt = me.getWheelRotation();
			if(rt > 0) {			// �X�N���[���A�b�v
				g.copyArea(0, rt, dim.width, dim.height, 0, -rt);
				g.clearRect(0, dim.height-rt, dim.width, rt);
			} else {			// �X�N���[���_�E��
				g.copyArea(0, 0, dim.width, dim.height, 0, -rt);
				g.clearRect(0, 0, dim.width, -rt);	
			}
		}			
	}
}

�v���O�����̐����F

���ǂ�

paint ���\�b�h���g��Ȃ��`��

�ȈՓI�ȕ`��@�Ƃ��āApaint() ���\�b�h���g�킸�ɁA���� Graphics �N���X�̃��\�b�h�����s���邱�Ƃ��”\�ł���B

class MyMouseAdapter extends MouseAdapter {
public void mouseClicked(MouseEvent me) {
Graphics gr = getGraphics();
x = me.getX();
y = me.getY();
gr.drawString("�N���b�N����܂���", x, y);
gr.dispose();
}
}

�v���O�����̐����F

3�s�ڂ� getGraphics()���\�b�h�� this.getGraphics() �Ə����Ƃ�����ȗ��������̂ŁA�u���́v�E�B���h�E�̃O���t�B�b�N�X��`�����ޕϐ��i�C���X�^���X�j���w�肵�Ă���B

6�s�ڂŁA���̃C���X�^���X�� drawString() ���\�b�h��ǂ�ŕ�������E�B���h�E�ɕ\������B

7�s�ڂ́A�u�S�~�������Â���v�Ƃ����d�������郁�\�b�h�B��ʂɃO���t�B�b�N�X�𗘗p����ƍ�Ɨp�ɑ����̃��������g�p���邽�߂ɁA�s�v�ƂȂ�����������������ăv���O�����̕��S���y������K��������B

���ǁA�ȉ��̎菇�� paint() ���g��Ȃ��`����������邱�Ƃ��”\�ƂȂ�B

  1. �uGraphics�v�̃C���X�^���X�𐶐����āigetGraphics()�j
  2. �����ɕ`������
  3. �Ō�ɂ͉������idispose()�j

���̃v���O������ paint() ���\�b�h�ƌ�������S���������������邪�A�E�B���h�E�T�C�Y��ς���ƁA�����Ă�����̂������Ă��܂��B�O���t�B�b�N�X�́A�‹����ς��Ƃ��̓s�x�Arepaint() - update() - paint() �����s�����A�Ƃ����������������A���̃v���O�����ɂ� paint() ���\�b�h���Ȃ��̂ŁAupdate() �ʼn�ʂ����������܂܂ɂȂ��Ă��܂�����ł���B



���ǂ�