�ڎ�
AWT �Ƃ�Abstract Window Toolkit �̗��ŁA�O���t�B�b�N���[�U�C���^�[�t�F�[�X�̃v���O�����i�N���X�j�̏W�܂�ł���BSwing �� AWT �̃R���|�[�l���g�ɂ��낢��ȋ@�\��t�������R���|�[�l���g�̏W�܂�ł���B�R���\�[����ʂŃe�L�X�g�̓��o�͂������Ă��镪�ɂ͕s�v�����A���͒��Ƀ��[�U���v���O�����̗����ς�����A�v�Z���ʂɉ����ĐV�K�̃f�[�^����͂�����ȂǁA���� �����g������̗ǂ��v���O��������肽���ꍇ�� AWT ���邢�� swing �𗘗p����Ƃ悢�B
Java�ɗp�ӂ���Ă���A�E�B���h�E�Y�̑���ł悭�g����{�^����e�L�X�g���̓{�b�N�X�A���j���[�A�_�C�A���O�{�b�N�X�Ȃǂ� AWT�R���|�[�l���g�Ƃ����B���s���ɂ��̃R���|�[�l���g�𑀍삷�邱�Ƃɂ��u�C�x���g�v����������B���̃C�x���g�̔������V�X�e�������m����d�g�݂����X�i�[�Ƃ����B�C�x���g�����������Ƃ��̏������v���O�����Ƃ��ď����A���X�i�[�𗘗p���ăC�x���g�̔������֒m�����Ƃ����̃v���O���������A�Ƃ����d�g�݂����Ηǂ��B�R���|�[�l���g�𗘗p���邽�߂ɂ́A�����ݒu����E�B���h�E���K�v�ƂȂ�B�E�B���h�E�́A�A�v���b�g���쐬���Ċ����̃u���E�U�𗘗p���邱�Ƃ��o���邪�AFrame �ƌĂ��R���|�[�l���g�Ŏ��삷�邱�Ƃ��ł���B
�悭�g����R���|�[�l���g�Ƃ��Ď��̂悤�Ȃ��̂�����BAWT �̃R���|�[�l���g���̑O�ɁuJ�v��t����� Swing �̃R���|�[�l���g���ɂȂ鎖���������ASwing �ŐV���ɒ�`���ꂽ���̂������B
| �ړI | �N���X�iAWT, Swing�j |
|---|---|
| �E�B���h�E����� |
Frame, JFrame |
| �{�^������� |
Button, JButton |
| �e�L�X�g���̓{�b�N�X�����i�P��s�j |
TextField, JTextField |
| �e�L�X�g�\���{�b�N�X������i�����s�p�j |
TextArea, JTextArea |
| �e�L�X�g�^�}�`��\������ |
Label, JLabel |
| �i�R���|�[�l���g��z�u����j�g����� |
Panel, JPanel |
| �摜��������Panel����� |
Canvas |
| �X���C�h�܂ݓ��͑��u����� | Scrollbar, Slider, JScrollbar, JSlider |
���ɁA(J)Dialog, (J)Checkbox, (J)Choice, (J)List, (J)MenuBar, �ȂǁBSwing �ŐV���ɒ�`���ꂽ���̂ɁA(J)PupupMenu JComboBox, JList, JMenuBar, JPupupMenu �Ȃǂ�����B
Swing �́A�قȂ�OS�ł��������b�N�A���h�t�B�[�������悤�ɐv����Ă���A�@�\���[�����Ă��邪�A���̕��A�t�b�g���[�N���d���Ȃ��Ă���B
�R���|�[�l���g���E�B���h�E�ɔz�u���邽�߂Ƀ��C�A�E�g�}�l�[�W���[�Ƃ����d�g�݂𗘗p����B�A�v���b�g�̃f�t�H���g���C�A�E�g�}�l�[�W���[�� FlowLayout �ŁA���ォ�珇�ԂɁA��`���ꂽ���Ԃɔz�u�����BFrame �̃f�t�H���g���C�A�E�g�}�l�[�W���[�́@BorderLayout �ŁA�㉺���E�ƒ�����5�J���̂����ꂩ�w�肵���ꏊ�ɔz�u�����ithis.add(button, "North"); �Ȃǁj�B�E�B���h�E�̍��W���w�肵�āA���R�Ƀ��C�A�E�g�������ꍇ�� setLayout(null) �Ƃ������\�b�h�����s����B
�悭�g���郌�C�A�E�g�ɂ́A���ɁAGridLayout, BorderBagLayout, CardLayout, BoxLayout �Ȃǂ�����B
�R���|�[�l���g�����̂悤�ɒ�`����Ă���Ƃ��������AFlowLayout �� GridLayout �̈Ⴂ�������B
// �{�^��
bt = new Button("add");
bt.addActionListener(this);
this.add(bt);
// ���x��
this.add(new Label("�@"));
this.add(new Label("���Z����l"));
// �e�L�X�g�t�B�[���h
tf = new TextField("0", 5);
this.add(tf);
// ���x��
this.add(new Label("�@�@���v"));
// �e�L�X�g�t�B�[���h
tf2 = new TextField("0", 10);
tf2.addTextListener(this);
this.add(tf2);
���̍��� FlowLayout �̗�A�E��GridLayout �̗�ł���B 
����̑I�����������A������N���b�N���邱�ƂŎ��s������e��I�ԁA�Ƃ����v���O���~���O�̓{�^�����g�����ƂŌ����悭�����ł���B
�u���E�U���E�B���h�E�Ƃ��ė��p����v���O�������A�v���b�g�Ƃ����B���̃v���O�����́A�{�^�����N���b�N����ƁA�N���b�N��u���E�U�ɕ\�������Ƃ������̂ł���B
// #2: �N���X��`
public class AWTsampleApplet extends Applet implements ActionListener {
int counter = 0;
// #3: �����ݒ�
public void init() {
JButton btn = new JButton("click me");
btn.addActionListener(this);
this.add(btn);
}
// #4: �`��
public void paint(Graphics gr) {
if(counter > 0)
gr.drawString("�{�^���� "+counter+"��N���b�N����܂���", 10, 50);
}
// #5: �C�x���g���荞�ݏ���
public void actionPerformed(ActionEvent ae) {
counter++;
repaint();
}
}
�v���O�����̐����F
Applet �N���X���p�������T�u�N���X�����iextends Applet�j�A���X�i�[�C���^�[�t�F�[�X������������iimplements ActionListener�j�BJButton �N���X�̃C���X�^���X�i���j���쐬���inew�j�A�{�^���������ꂽ���ɍ쓮���郊�X�i�[��g�ݍ��݁iaddActionListener�j�A�A�v���b�g�ɓ\��t����iadd�j�B actionPerformed ���\�b�h���I�[�o�[���C�h����`�ŁA�{�^�����N���b�N���ꂽ�Ƃ��ɐ�����C�x���g ActionEvent �̏����v���O�����������B�u���E�U�łȂ��A����̃t���[�����{�^����g�ݍ��ރE�B���h�E�Ƃ��Ďg���ꍇ�́A��̃v���O������ #2, #3 �̃E�B���h�E�����Ɋւ�镔�����ύX����邾���ŁAAWT�R���|�[�l���g�Ɋւ�镔���͓����ł���B
���́ASwing �� JFrame ���p�������T�u�N���X������ăE�B���h�E��\�������A��Ɠ����悤�Ȏd��������v���O�����̗�ł���B�C�x���g�����v���O�����͏ȗ������B
class TestJFrame {
// ���C�����\�b�h
public static void main(String[] args) {
MyJFrame myFrame = new MyJFrame("JFrame �̃T���v��");
myFrame.setVisible(true);
}
}
class MyJFrame extends JFrame {
// �R���X�g���N�^
MyJFrame(String title) {
setSize(new Dimension(300, 200)); // �E�B���h�E�T�C�Y
setTitle(title); // �^�C�g���\��
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // �v���O�����̏I��
this.setLayout(new FlowLayout()); // ���C�A�E�g�̐ݒ�
// �{�^���̒�`
JButton btn = new JButton("�{�^��");
btn.addActionListener(this);
add(btn); // �{�^���̒lj�
}
}
�v���O�����̐����F
MyJFrame �� JFrame �N���X���p������̂ŁA�uextends JFrame�v�Ƃ���BsetSize(300,200)�v�ɂ��A��ʍ���ɁA��300�s�N�Z���A�c20�s�N�Z���̃E�B���h�E���\�������B����ɁusetLocationRelativeTo(null);�v��lj�����ƁA��ʒ����ɕ\�������悤�ɂȂ�B��ʂ̎w��ʒu�ɕ\�����������ꍇ�� setBounds ���\�b�h���g���BsetDefoaltCloseOperation�v���\�b�h��g�ݍ��ށBBorderLayout �ɂȂ��Ă��邪�A�����ł́usetLayout(new FlowLayout())�v�Ƃ��āA�u�������݁v���C�A�E�g��ݒ肵�Ă���B���R�ɔz�u�����߂����ꍇ�́usetLayout(null)�v�Ƃ���BMyJFrame �̃C���X�^���X���쐬���inew�j�A�������������isetVisible(true)�j�B�����̓t���[����`�̃R���X�g���N�^�Ŏ��s���Ă��ǂ��BMyJFrame �̒��ɏ������Ƃ��ł���B�N���X�̓����Ŏ������g�̃C���X�^���X�����`�ɂȂ邪�A����ł��\��Ȃ��BAWT �� Frame ������ꍇ�́A�uextends JFrame�v���uextends Frame�v�ɕς��A�u����v�{�^�����N���b�N���ꂽ�Ƃ��̏����p���\�b�h�usetDefaultCloseOperation�v������ WindowListener �𗘗p���郁�\�b�h�ɒu��������Ηǂ��B
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) { System.exit(0); }
});
JFrame ������ JButton ���`�������́i���}�j�ƁAFrame ������ Button ���`�������́i�E�}�j�̎��s���ʂ͎��̒ʂ�B�t���[���̔w�i�F�ƃ{�^���̃f�U�C��������Ă���B
�@�@�@�@�@
�p�l���́A�����̃E�B���h�E�ɐV���ȁi�����j�t���[�������B�l�X�ȃR���|�[�l���g��p�r�ʂɃO���[�v�����ĕʁX�̃p�l���ɔz�u����ƁA�����ڂ��v���O�����R�[�h���Ȍ��ɂȂ�B
// �t���[���̃��C�A�E�g���t���[���C�A�E�g�ɕς���
setLayout(null);
// �p�l������� JPanel myPanel = new JPanel(); myPanel.setBounds(20, 10, 100, fSize.height - 60); // �ʒu���� myPanel.setBorder(new BevelBorder(BevelBorder.RAISED)); // ���̕\�� myPanel.setLayout(new GridLayout(4, 1)); // �i�q�C�A�E�g�ɂ���
// ���x��������ăp�l���ɓ\��t���� JLabel lblb = new JLabel("�����", JLabel.CENTER); // �����ɕ\�� myPanel.add(lblb); // �p�l���ɓ\��t���� // �e�L�X�g�t�B�[���h������ăp�l���ɓ\��t���� tf = new JTextField(4); // 4�������̕����m�� tf.addActionListener(this); // Enter���͎����荞�� myPanel.add(tf);
// �{�^��������ăp�l���ɓ\��t���� JButton btn = new JButton("�{�^��"); btn.addActionListener(this); myPanel.add(btn);
// �O���t�B�b�N���x��������ăp�l���ɓ\��t���� JLabel lblc = new JLabel(); lblc.setIcon(new ImageIcon("./eclipse.png")); // �C���[�W��\�������� lblc.setHorizontalAlignment(JLabel.CENTER); // �������� myPanel.add(lblc);
// �p�l�����E�B���h�E�i�t���[���j�ɓ\��t���� add(myPanel);
JLabel �͕��������łȂ��A�C���[�W��\�����邱�Ƃ��o����iATM �� Label �͂ł��Ȃ��j�B�unew ImageIcon("./eclipse.png")�v�ɂ���ĐV���ȃC���[�W�t�@�C�������A������uaddIcon�v���\�b�h�őg�ݍ��ށB
�R���|�[�l���g�ݒu�̍��W�F�t���[���C�A�E�g�ɂ��č��W�w�肷��ꍇ�AJFrame �� Frame �ł͌��_���قȂ�BFrame �̏ꍇ�A���_�̓^�C�g���o�[�̉��Ȃ̂ŁA�B��Č����Ȃ��B32�h�b�g������K�v������B���́A�p�l���̍�����W�� (20, 10) �Ƃ����ꍇ�� JFrame �� Frame �ɐݒu�����ꍇ�̈Ⴂ�ł���B

TextField �ɐV���ȃf�[�^�����͂��ꂽ�iEnter�L�[�������ꂽ�j�Ƃ��ɂ��鏈�������s����悤�ɂ������ꍇ�́A���̂悤�ɂ���BTestField �̖��O��tf �Ƃ���B
ActionListener ����������Btf.addActionListener(this);�v�ɂ����ActionListener �̊��荞�ݏ������\�ɂ���BactionPerformed�v���\�b�h���I�[�o�[���C�h����B�uif(getSource() == tf) { ... }�v�̏����������ɕK�v�ȏ����������BTextField �̓��e�́ugetText�v���\�b�h�Ŏ��o�����Ƃ��o���A���l�ɕϊ�����ɂ́uInteger.parseInt(tf.getText());�v���邢�́uDouble.parseDouble(tf.getText());�v�Ƃ���Bpublic class Test extends Applet implements ActionListener {
TextField tf;
public void init() {
tf = new TextField("123");
tf.addActionListener(this);
add(tf);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == tf) {
System.out.println("�f�[�^���� " + Integer.parseInt(tf.getText()));
}
}
}
���邢�́A���l�Ȋ��荞�݂���������悤�ɂȂ�ƁA���荞�ݏ����p�̃v���O�����͕ʂ̐V���ȃN���X�Ƃ��Ē�`�����ق����������肷�邩������Ȃ��B���̏ꍇ�ɂ́A�R���X�g���N�^�ɂ���āA�Ăяo�����̃N���X���������n���Ă����Ƃ悢�B
public class Test extends Applet {
TextField tf;
public void init() {
tf = new TextField("123");
tf.addActionListener(new MyActionListener(this));
add(tf);
}
}
class MyActionListener implements ActionListener {
Test tclass;
MyActionListener(Test tclass) {
this.tclass = tclass;
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == tclass.tf) {
System.out.println("�f�[�^���� " + Integer.parseInt(tclass.tf.getText()));
}
}
}
�����s�̃e�L�X�g��\�����邽�߂� TextField �̑���� TextArea ���g���B�\���G���A���z�����ꍇ�ɃX�N���[���o�[��\�������邽�߂ɂ́AScroll �y�C�����g��Ȃ�������Ȃ��B
// �e�L�X�g�G���A
JTextArea ta = new JTextArea(10, 25); // 1�s25������10�s���̗̈���m��
// �X�N���[���y�C�����`�A�e�L�X�g�G���A��g�ݍ���
JScrollPane scroll = new JScrollPane(ta); add(scroll);
.
���l����͂���ہA�L�[�{�[�h�łȂ��A�A�i���O���ɓ��͂��铹��Ƃ��ăX���C�_�[������B���x���͂̂悤�ɁA�p�����[�^�̒l�����X�ɕς������Ȃǂ̏ꍇ�ɕ֗��ł���BJSlider �́ASwing �Œ����X���C�_�[�R���|�[�l���g�ł���BAWT �ł� Scrollbar ���g���B
JSlider �̊��荞�݃C�x���g�� ChangeListener ���������AChangeEvent ���������� stateChanged ���\�b�h���I�[�o�[���C�h���邱�Ƃŏ��������B
��FJSlider �̏�����
// �e�N���X�Ɏ���
class SliderTest extends JFrame implements ChangeListener {
// �X���C�_�[�̒�`
SliderTest() {
JSlider slider = new JSlider(0,1000); // �ŏ��l�A�ő�l slider.setPreferredSize(new Dimension(fsize.width-20, 70)); // �\���̈�w�� slider.addChangeListener(this); // ���荞�ݏ����p slider.setMajorTickSpacing(1000); // �e�B�b�N�}�[�N�̎w�� slider.setPaintTicks(true); // �����\�� slider.setPaintLabels(true); // �e�B�b�N�̐��l��\�� add(slider);
// �C�x���g�����F�X���C�_�[�̏�ԕω� public void stateChanged(ChangeEvent e) { ...
}
�e�B�b�N���x���Ɏ����l��\���������ꍇ�́A���x���p�̕\������đΏ�����K�v������B���̂��̗�ł���B
double min, max;
Hashtable<Integer, JComponent> tab = new Hashtable<Integer, JComponent>(); tab.put(0, new JLabel(String.format("%.2f", min))); tab.put(500, new JLabel(String.format("%.2f", (min+max)/2))); tab.put(1000, new JLabel(String.format("%.2f", max))); // �X���C�_�[��` js = new JSlider(0, 1000);
...
js.setLabelTable(tab); // �ڐ��胉�x���̑Ή��\
js.setPaintLabels(true);
��i�X���C�_�[�̎g�p��j�@���́A�ŏ��l�ő�l�I�ɓ��͂ł���t�B�[���h��t�����X���C�_�[���p�l���ɑg�ݍ���ł���B
class MySliderSubb extends JPanel implements ChangeListener {
Dimension size = new Dimension(300, 65);
JTextField fmin, fmax;
JSlider js;
MyJFrame mf; // �Ăяo�����̃N���X
MySliderSubb(String name, double min, double max, MyJFrame mf) {
this.mf = mf;
this.setPreferredSize(size);
this.setBackground(Color.blue);
this.setLayout(null);
// �ϐ���
JLabel jb = new JLabel(name);
jb.setBounds(0, 5, 80, 25);
jb.setHorizontalAlignment(JTextField.CENTER);
add(jb);
// �X���C�_�[��`
js = new JSlider(0, 1000);
js.setBounds(80, 5, size.width-85, 30);
js.addChangeListener(this); // ���荞�ݏ����p
js.setMajorTickSpacing(100); // �e�B�b�N�}�[�N�̎w��
js.setPaintTicks(true); // �����\��
add(js);
// �ŏ��l�A�ő�l�̓��͗p�e�L�X�g�t�B�[���h��`
fmin = new JTextField(""+min);
fmin.setBounds(80, 40, 40, 20);
fmin.setHorizontalAlignment(JTextField.CENTER);
add(fmin);
fmax = new JTextField(""+max);
fmax.setBounds(255, 40, 40, 20);
fmax.setHorizontalAlignment(JTextField.CENTER);
add(fmax);
}
// �X���C�_�[���������Ƃ��̏����i�Ăяo�����ɒl��Ԃ��j
public void stateChanged(ChangeEvent e) {
double min = Double.parseDouble(fmin.getText());
double max = Double.parseDouble(fmax.getText());
double z = js.getValue() * 0.001 * (max-min) + min;
mf.setSliderValue(z);
}
}
���́A���̃N���X�̃C���X�^���X���쐬�����Ƃ��̕\����ł���B
�@�@�@�@�@
Slider �̎g�p��F���́ASlider ���g���� RGB �l���w�肵�A�F���{��\��������v���O�����ł���B
public class AWTsampleSlider extends Applet implements ChangeListener {
JSlider[] colorBar = new JSlider[5];
TextField tf;
// �����ݒ�
public void init() {
this.setSize(400, 400);
this.setLayout(new FlowLayout());
for(int i=0; i<3; i++) {
colorBar[i] = new JSlider(0, 255);
colorBar[i].addChangeListener(this);
colorBar[i].setPreferredSize(new Dimension(this.getWidth()-40, 70));
colorBar[i].setMajorTickSpacing(128);
colorBar[i].setPaintTicks(true);
colorBar[i].setPaintLabels(true);
add(colorBar[i]);
}
tf = new TextField("RGB", 20);
add(tf);
}
// �X���C�_�[�̊��荞�ݏ���
public void stateChanged(ChangeEvent e) {
setBackground(new Color(colorBar[0].getValue(),
colorBar[1].getValue(), colorBar[2].getValue()));
tf.setText("R,G,B = " + colorBar[0].getValue() + ", " +
colorBar[1].getValue() + ", " + colorBar[2].getValue());
}
}
�v���O�����̐���
setMajorTickSpacing �͖ڐ���̊Ԋu��ݒ肵�AsetPaintTicks(true) �͖ڐ����\���AsetPaintLabels(true) �͖ڐ���̐��l��\�����邱�Ƃ��w������B getValue() ���\�b�h�Œm�邱�Ƃ��o����B���͎��s��̉�ʂł���B
�@�@�@�@�@
.Slider �Ɠ����悤�ȋ@�\������ Scrollbar �������悤�Ɏg����BScrollbar �̊��荞�݃C�x���g�� AdjustmentListener ���������AChangeEvent ���������� stateChanged ���\�b�h���I�[�o�[���C�h���邱�Ƃŏ��������B
��FScrollbar �̏�����
// �e�N���X�Ɏ���
class ... implements AdjustmentListener
// �X�N���[���o�[�̒�`
Scrollbar sb = new Scrollbar(Scrollbar.HORIZONTAL, 128, 10, 0, 255); sb.addAdjustmentListener(this); sb.setBounds(20,50+30*i,200,20); add(sb);
// �C�x���g�����F�X�N���[���o�[�̏�ԕω� public void stateChanged(ChangeEvent e) { ...
}
.
�{�^�����E�N���b�N����ƃ��j���[���\������āA��̃��j���[���ڂ�I�ׂ�悤�ɂȂ�A�Ƃ����d�|������������̂� JPopupMenu �ł���B���́A�{�^�����N���b�N����ƃ|�b�v�A�b�v���j���[���\������A���ꂼ��̊��荞�ݏ������s���悤�ɐݒ肳�ꂽ�v���O�����̗�i�����j�ł���B
class MyJFrame extends JFrame {
JPopupMenu popm;
// �R���X�g���N�^�Œ�`
MyJFrame() {
JButton btn = new JButton("�E�N���b�N");
btn.addMouseListener(new MyMouseAdapter(this));
add(btn); // �{�^���̒lj�
popm = new JPopupMenu();
JMenuItem menuA = new JMenuItem("menuA"); // 3�s�����j���[�̌������J��Ԃ�
menuA.addActionListener(this);
popm.add(menuA);
JMenuItem menuB = new JMenuItem("menuB");
menuB.addActionListener(this);
popm.add(menuB);
}
// ���荞�ݏ���
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand() == "menuA") {
System.out.println("menuA ���I������܂���");
}
if(e.getActionCommand() == "menuB") {
System.out.println("menuB ���I������܂���");
}
}
// �{�^���N���b�N���̊��荞�ݏ����i�|�b�v�A�b�v���j���[�\���j
class MyMouseAdapter extends MouseAdapter {
MyJFrame mf; // �Ăяo�����̃N���X
MyMouseAdapter(MyJFrame mf) {
this.mf = mf;
}
public void mouseReleased(MouseEvent e) {
if(e.isPopupTrigger()) {
mf.popm.show(e.getComponent(), e.getX(), e.getY());
} // �N���b�N���ꂽ�ʒu�Ƀ|�b�v�A�b�v���j���[�\��
}
}
�{�^����e�L�X�g�t�B�[���h�Ȃǂ���̃t���[���i�p�l���j�ɂ܂Ƃ߁A���j�^�[�p����ՂƂ��Ă���B�O���t�B�b�N�X�\���p�Ƃ��āA�ʂ̃t���[�����`���邱�Ƃ�z�肵�Ă���B
public class ControlPanelPlus extends Frame { // Frame �̏ꍇ
Dimension fSize = new Dimension(800, 600); // �t���[���T�C�Y
Dimension pSize = new Dimension(fSize.width - fSize.height - 10,
fSize.height - 60); // �R���g���[���p�l���T�C�Y
Dimension gSize = new Dimension(pSize.height, pSize.height); // �O���t�p�l���T�C�Y
Point pORG = new Point(20, 35); // // �R���g���[���p�l��������W�iFrame �̏ꍇ�j
// Point pORG = new Point(10,10); // �R���g���[���p�l��������W�iJFrame �̏ꍇ�j
Point gORG = new Point(pORG.x + pSize.width + 20, pORG.y); // �O���t�p�l������ʒu���W
ControlPanelPlus(String title) {
...
this.setLayout(null);
GraphicCanvas grfCanvas = new GraphicCanvas(gORG, gSize);
this.add(grfCanvas);
this.add(new ControlPanelSub(grfCanvas, pORG, pSize));
}
}
// �R���g���[���p�l��
class ControlPanelSub extends JPanel implements ActionListener {
GraphicCanvas gCanvas;
Dimension size;
JButton[] bt = new JButton[10]; // �{�^���z��
int Nbuttons = 7; // �{�^���̌�
int bHeight = 35; // �{�^���̍���
String[] bname = { "drawCircle", "button2", "button3", "button4",
"button5", "button6", "button7" };
JTextField[] tf = new JTextField[10]; // �e�L�X�g�t�B�[���h�z��
int Nfields = 4; // �e�L�X�g�t�B�[���h�̌�
int fHeight = 30; // �e�L�X�g�t�B�[���h�̍���
String[] tvalue = { "100", "0", "0", "0" };
String[] lname = { "radius", "param2", "param3", "param4" };
JTextArea ta;
ControlPanelSub(GraphicCanvas gCanvas, Point p, Dimension size) {
this.gCanvas = gCanvas;
this.setBounds(p.x, p.y, size.width, size.height);;
this.size = size;
this.setLayout(null);
// �{�^���p�p�l���̒�`
JPanel btnPanel = new JPanel();
btnPanel.setBounds(0, 0, size.width, (Nbuttons + 1) / 2 * bHeight);
btnPanel.setLayout(new GridLayout((Nbuttons + 1) / 2, 2));
// �{�^���̒�`
for (int i = 0; i < Nbuttons; i++) {
bt[i] = new JButton(bname[i]);
bt[i].addActionListener(this); // ���荞�ݏ����p
btnPanel.add(bt[i]);
}
add(btnPanel);
// �e�L�X�g�t�B�[���h�p�p�l���̒�`
JPanel txtPanel = new JPanel();
txtPanel.setBounds(0, btnPanel.getHeight() + 10, size.width, Nfields * fHeight);
txtPanel.setLayout(new GridLayout(Nfields, 2));
// �e�L�X�g�t�B�[���h�{���x���̒�`
for (int i = 0; i < Nfields; i++) {
txtPanel.add(new JLabel(lname[i], JLabel.CENTER));
tf[i] = new JTextField(tvalue[i]);
tf[i].setHorizontalAlignment(JTextField.CENTER); // ��������
tf[i].addActionListener(this); // ���荞�ݏ����p
txtPanel.add(tf[i]);
}
add(txtPanel);
// ���\���p�Ƃ��āA�e�L�X�g�G���A�������ɐݒu
int ht = size.height - btnPanel.getHeight() - txtPanel.getHeight() - 20;
ta = new JTextArea((ht - 30) / 16, 23);
ta.setText("���ʕ\���p�G���A�F\n");
JScrollPane scroll = new JScrollPane(ta);
scroll.setBounds(0, size.height - ht, size.width, ht);
add(scroll);
}
// ���荞�ݏ���
public void actionPerformed(ActionEvent e) {
ta.append(e.getActionCommand() + " ���N���b�N����܂���\n");
// �`��
if (e.getActionCommand() == "drawCircle") {
gCanvas.drawCircle(Integer.parseInt(tf[0].getText()));
}
}
}
���ʂ͎��̒ʂ�B
�@�@
�O���t�B�b�N�X�p�� Panel �Ƃ��� Canvas ������B�}�E�X�̃C�x���g���t���郊�X�i�[����������B�������}���邽�߂ɁA�`��́A�C���[�W�t�@�C�����g���A�_�u���o�b�t�@�����O�ōX�V����B���ۂ̕`��́A���̒��Ƀ��\�b�h�Ƃ��ď������ށB�t���[��������āA���� GraphicBoard �̃C���X�^���X��\��t����悢�B
public class ScrollScreen extends Frame {
...
ScrollScreen(String title) {
...
this.setLayout(null);
this.add(new GraphicBoard2(15,35,dim.width-30,dim.height-50));
}
}
class GraphicBoard2 extends Canvas {
Image img = null;
Graphics g;
Dimension dim;
Point prev, now = new Point(0,0);
GraphicBoard2(int x, int y, int width, int height) {
this.setBounds(x, y, width, height);
this.addMouseListener(new MyMouseAdapter());
this.addMouseMotionListener(new MyMouseMotionAdapter());
this.addMouseWheelListener(new MyMouseWheelListener());
}
// �O���t�B�b�N�X
public void paint(Graphics gr) {
super.paint(gr);
if (img == null) {
dim = this.getSize();
img = this.createImage(dim.width, dim.height);
g = img.getGraphics();
}
gr.drawImage(img, 0, 0, this); // �C���[�W��`������
}
// ������h�~
public void update(Graphics g) {
paint(g);
}
// �}�E�X�N���b�N���̊��荞�ݏ����F�N���b�N���ꂽ�_�Ɂu�{�v�\��
class MyMouseAdapter extends MouseAdapter {
public void mouseClicked(MouseEvent me) {
now = me.getPoint();
g.drawLine(now.x-5, now.y, now.x+5, now.y);
g.drawLine(now.x, now.y-5, now.x, now.y+5);
repaint();
}
}
// �}�E�X�h���b�O���̊��荞�ݏ����F�h���b�O�ɍ��킹�ċO�Ղ�`��
class MyMouseMotionAdapter extends MouseMotionAdapter {
public void mouseDragged(MouseEvent me) {
prev = now;
now = me.getPoint();
if(Math.abs(now.x-prev.x) + Math.abs(now.y-prev.y) < 20)
g.drawLine(prev.x, prev.y, now.x, now.y);
repaint();
}
}
// �}�E�X�z�C�[����]���̊��荞�ݏ����F�X�N���[�����X�N���[������
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, 1);
g.clearRect(0, 0, dim.width, 1);
}
repaint();
}
}
}