S-JIS[2009-03-31/2009-11-06] �ύX����

���C�A�E�g�}�l�[�W���[�iSwing�j

�R���e�i�iJPanel���j�ɃR���|�[�l���g��lj�����ہA���̔z�u���@�����߂�̂�LayoutManager�B
LayoutManager�̋�ۃN���X�ɂ͐F�X�Ȏ�ނ�����̂ŁA�ړI�ɉ����Ďg��������B


��ȃ��C�A�E�g�}�l�[�W���[�ꗗ

Layout
Manager
���� ���e �R���|�[�l���g�T�C�Y�̊T�v �����N
BorderLayout 1.0 ��E���E���E�����E�E�̂��ꂼ���1�‚��ƒR���|�[�l���g��z�u����B
�t���[���̃R���e�i�̃f�t�H���g�B
��Ɖ��̃R���|�[�l���g�͍��E��t�ɍL����B
���ƉE�̃R���|�[�l���g�͏㉺��t�ɍL����B
�����͂��̒���t�ɍL����B
BoxLayout �@ ����񂠂邢�͏c���Ɂi�܂�Ԃ������Łj�R���|�[�l���g����ׂ�B �e�R���|�[�l���g�̐����T�C�Y
�̂����A�ő�̂��̂ɍ��킹����B
CardLayout 1.0 �����̃R���|�[�l���g��ێ����邪�A���̂���1�‚�����\������B
�ł�������g���Ȃ��^�u�y�C���̕��������̂ł́c�H
�y�C����t�ɍL����B
FlowLayout 1.0 �����ɃR���|�[�l���g����ׂ�B
����؂�Ȃ�������܂�Ԃ��Ď��̍s�ɕ��ׂ���B
�����P�Ƀ{�^������ׂ��肵�����ꍇ�ɕ֗��B
�����T�C�Y
GridLayout 1.0 m�~n�̏��ڂɋ�؂��Ă��̒��ɔz�u����B ���ڂ̃T�C�Y��t�ɍL����B
GridBagLayout 1.0 m�~n�̏��ڂɋ�؂��Ă��̒��ɔz�u����B
���ړ��m���q���ő傫�ȃ}�X�ɂ��邱�Ƃ��o����B
�@
GroupLayout 1.6 �R���|�[�l���g���c���ɃO���[�s���O����B
�����O���[�v���ł͓����悤�Ȉʒu�Ɂi���񂵂āj�z�u�����B
�_�C�A���O�����̂ɕ֗��B
�����T�C�Y�B
�ꍇ�ɂ���Ă͍ő�T�C�Y�܂ōL����B
OverlayLayout �@ �R���|�[�l���g���݂��ɏd�ˍ��킹����B �@
SpringLayout 1.4 �R���|�[�l���g���m�̊Ԋu���w�肷��B
�E�B���h�E�T�C�Y��ύX����ƁA�Ԋu�w��ɉ����Ĉʒu���ω�����B
�iSpring�́A�u�t�v����Ȃ��āu�o�l�v�j
�@

BorderLayout

JFrame�̃R���e�i�̃f�t�H���g�̃��C�A�E�g�B[2009-04-05]
�ȉ��̂悤��5�‚̃G���A�ɕ�����Ă���A���ꂼ��̈ʒu��1�‚��i1�‚̂݁j�R���|�[�l���g��z�u�ł���B

BorderLayout�̈ʒu��\���萔
NORTH
�iPAGE_START�j
WEST
�iLINE_START�j
CENTER EAST
�iLINE_END�j
SOUTH
�iPAGE_END�j
	private void initPane(Container c) {
		c.add(new JButton("NORTH"), BorderLayout.NORTH);
		c.add(new JButton("SOUTH"), BorderLayout.SOUTH);
		c.add(new JButton("WEST"), BorderLayout.WEST);
		c.add(new JButton("EAST"), BorderLayout.EAST);
		c.add(new JButton("CENTER"), BorderLayout.CENTER);
	}

NORTH��PAGE_START�𓯎��Ɏw�肷��ƁAPAGE_START�̕����D�悳���BPAGE_END��LINE�n�����l�B
����ȊO�̎w��ł́A�����ʒu�ɍēxadd()����ƁA�ォ��lj����������L���ɂȂ�B
�ʒu�������w�肹����add()�����ꍇ��CENTER���w�肳�ꂽ���ƂɂȂ�B

BorderLayout�̃R���e�i�i�y�C���j�̃T�C�Y��ύX�����ꍇ�ABorderLayout���̊e�R���|�[�l���g���T�C�Y���ς��B
���̍ہA�������i���j��NORTH�ECENTER�ESOUTH���ς��B
�c�����i�����j��WEST�ECENTER�EEAST���ς��B
�R���|�[�l���g�̎�ނɂ���ẮA�o�^����ʒu��CENTER�ł�PAGE_START�ł��\���͓����悤�Ɍ����邪�A�T�C�Y�ύX�����ꍇ�̓��삪�ς���Ă���B �iCENTER���ƕ����������ς�邪�APAGE_START�͕������ς��Ȃ��j


BoxLayout

����񂠂邢�͏c�����܂�Ԃ��������R���|�[�l���g�����ׂ���B�iFlowLayout���Ɛ܂�Ԃ����j
�e�R���|�[�l���g�͊�{�I�ɐ����T�C�Y�A�Ƃ������E�B���h�E���ɓ���؂�͈͂ōő�T�C�Y�ɂȂ�B

�Ⴆ�Έȉ��̂悤�ȃ��C�A�E�g������B

�e�L�X�g�G���A �{�^��
�傫��
�X�N���[��
�G���A

�������I�ɂ�2�‚�JPanel�iBoxLayout�j�����̂悤�Ɏg�p����B

�e�L�X�g�G���A �{�^��
�傫��
�X�N���[��
�G���A

��s�ځi�e�L�X�g�G���A+�{�^���j����������BoxLayout�ɂ���B
�{�^���T�C�Y�͌Œ�ŁA�e�L�X�g�G���A�͖������Ƃ���B����ƁA�E�B���h�E�����ɍL�����ۂɂ��A�{�^���T�C�Y�͕ς�炸�Ƀe�L�X�g�G���A���������ς��B
�i�������ƌ����Ă��A���ۂɂ̓E�B���h�E�����傫���l���Z�b�g���Ă����B�����ł̓E�B���h�E���͍ő�ł���������1280���x�Ȃ̂ŁA32768�iShort.MAX_VALUE�j�Ƃ��ɂ��Ă����΂悢�j

��s�ڂƓ�s�ځi�X�N���[���G���A�j���c������BoxLayout�ɂ���B�i��s�ڂ�BoxLayout�Ƃ͕ʃC���X�^���X�j
��s�ڂ̍������Œ�ɂ��Ă����΁A�E�B���h�E���c�ɍL�����ۂɂ̓X�N���[���G���A�������ω�����B

import javax.swing.BoxLayout;
import javax.swing.JPanel;
	private void initPane(Container c) {
		// 1�s�ڂ̓���
		JComponent c1 = new JTextField("�e�L�X�g�G���A");
		JComponent c2 = new JButton("�{�^��");

		//�{�^���̃T�C�Y�͌Œ�Ȃ̂ŁA�e�L�X�g�G���A�̃T�C�Y������ɍ��킹��
		Dimension sz1 = c1.getMaximumSize();
		Dimension sz2 = c2.getMaximumSize();
		sz1.width  = Short.MAX_VALUE;	//�e�L�X�g�G���A�̉����͂�����ł��傫���o���邱�Ƃɂ���
		sz1.height = sz2.height;		//�e�L�X�g�G���A�̍����̓{�^���̍����܂łƂ���
		c1.setMaximumSize(sz1);

		// ����BoxLayout�i1�s�ځj
		JPanel panel1 = new JPanel();
		panel1.setLayout(new BoxLayout(panel1, BoxLayout.LINE_AXIS));
		panel1.add(c1);	//�e�L�X�g�G���A
		panel1.add(c2);	//�{�^��

		// �X�N���[���G���A�i2�s�ځj
		JScrollPane scroll = new JScrollPane(new JTree());

		// �c��BoxLayout
		JPanel panelV = new JPanel();
		panelV.setLayout(new BoxLayout(panelV, BoxLayout.PAGE_AXIS));
		panelV.add(panel1);	//1�s��
		panelV.add(scroll);	//2�s��

		c.add(panelV);
	}

GroupLayout

�����̃R���|�[�l���g���T�C�Y���l�����Đ��񂵂Ă����B[2009-04-05]
�_�C�A���O�����Ƃ��ɕ֗��B

���񂵂����i�ʒu�����킹�����j�R���|�[�l���g���c�Ɖ����ꂼ��ɃO���[�v�����ēo�^����B
�����A���̋�̓I�ȕ��@�i�\���E�g�����j�����܂�����c�Ƃ���������Ȃ��Ƃ悭������Ȃ��B


��1

�P���Ȃ��̂Ȃ��ȉ��̃v���O�����̂悤�ɒ莮�����Ă��܂��̂�������������Ȃ��B
�i����^���C�A�E�g���쐬����GroupLayoutUtil [2009-11-06]�j

�T���v���̍\���C���[�W
1�s�e�L�X�g
���x���̂� �@
�����s�e�L�X�g
�R���{�{�b�N�X

������S�̂̃T�C�Y��ύX�����ꍇ�A���̗�̓��x���݂̂Ȃ̂ŁA�T�C�Y�͕s�ρB
�@�E�̗�̊e�R���|�[�l���g�̃T�C�Y���S�̂ɍ��킹�ĐL�k����B
�@1�s�e�L�X�g�iJTextField�j��R���{�{�b�N�X�iJComboBox�j�͍����͕s�ςȂ̂ŁA�c�����̍����͕����s�e�L�X�g�iJTextArea�j�������ς��B
�@�����́A���̗�ł͉E�̗�S�ẴR���|�[�l���g���ς��B
�@�v����ɁA�e�R���|�[�l���g�́A�X��setMaximumSize()�Ŏw�肳�ꂽ�ő�l�܂ōL����B

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.ParallelGroup;
import javax.swing.GroupLayout.SequentialGroup;
	private void initPane(Container container) {
		GroupLayout layout = new GroupLayout(container);
		container.setLayout(layout);

		// �R���|�[�l���g���m�̊Ԋu���󂯂�ݒ�
		layout.setAutoCreateGaps(true);
		layout.setAutoCreateContainerGaps(true);

		// ��肽���\��
		JComponent[][] compos = {
			{ new JLabel("1�s�e�L�X�g"),    new JTextField()                 },
			{ new JLabel("���x���̂�"),     null                             },
			{ new JLabel("�����s�e�L�X�g"), new JScrollPane(new JTextArea()) },
			{ new JLabel("�R���{�{�b�N�X"), new JComboBox()                  },
		};

		int ny = compos.length;
		int nx = compos[0].length;

		// ���������̃O���[�v
		{
			SequentialGroup hg = layout.createSequentialGroup();
			for (int x = 0; x < nx; x++) {
				ParallelGroup pg = layout.createParallelGroup();
				for (int y = 0; y < ny; y++) {
					JComponent c = compos[y][x];
					if (c != null) {
						pg.addComponent(c);
					}
				}
				hg.addGroup(pg);
			}
			layout.setHorizontalGroup(hg);
		}

		// ���������̃O���[�v
		{
			SequentialGroup vg = layout.createSequentialGroup();
			for (int y = 0; y < ny; y++) {
				ParallelGroup pg = layout.createParallelGroup(GroupLayout.Alignment.BASELINE);
				for (int x = 0; x < nx; x++) {
					JComponent c = compos[y][x];
					if (c != null) {
						pg.addComponent(c);
					}
				}
				vg.addGroup(pg);
			}
			layout.setVerticalGroup(vg);
		}
	}

��2

�����̃R���|�[�l���g��1�‚̃R���|�[�l���g�̗l�Ɉ����ă��C�A�E�g�������ꍇ�i���L�̗�́u�e�L�X�g�{�b�N�X�v�Ɓu�{�^��1-1�v�j�A�ʓr�O���[�v������B[2009-09-26]
�i��GroupLayoutUtil���g���ĕ\��������@ [2009-11-06]�j

�T���v���̍\���C���[�W
1�s�ڃ��x��
2�s�ڃ��x��
	private JComponent line1Label    = new JLabel("1�s�ڃ��x��");
	private JComponent line1Text     = new JTextField("�e�L�X�g�{�b�N�X");
	private JComponent line1Button11 = new JButton("�{�^��1-1");
	private JComponent line1Button12 = new JButton("�{�^��1-2");

	private JComponent line2Label   = new JLabel("2�s�ڃ��x��");
	private JComponent line2List    = new JScrollPane(new JList(new String[] {"�I����1", "�I����2"}));
	private JComponent line2Button2 = new JButton("�{�^��2");
	private void initPane(Container container) {
		GroupLayout layout = new GroupLayout(container);
		container.setLayout(layout);

		// �R���|�[�l���g���m�̊Ԋu���󂯂�ݒ�
		layout.setAutoCreateGaps(true);
		layout.setAutoCreateContainerGaps(true);

		// �񖈁i�����O���[�v�j
		{
			SequentialGroup hg = layout.createSequentialGroup();
			{ // 1���
				ParallelGroup pg = layout.createParallelGroup();
				pg.addComponent(line1Label);
				pg.addComponent(line2Label);
				hg.addGroup(pg);
			}
			{ // 2���
				ParallelGroup pg = layout.createParallelGroup();
				{
					SequentialGroup g = layout.createSequentialGroup();
					g.addComponent(line1Text);
					g.addGap(0);		//�Ԋu���l�߂�
					g.addComponent(line1Button11);
					pg.addGroup(g);
				}
				pg.addComponent(line2List);
				hg.addGroup(pg);
			}
			{ // 3���
				ParallelGroup pg = layout.createParallelGroup();
				pg.addComponent(line1Button12);
				pg.addComponent(line2Button2);
				hg.addGroup(pg);
			}
			layout.setHorizontalGroup(hg);
		}

		// �s���i�����O���[�v�j
		{
			SequentialGroup vg = layout.createSequentialGroup();
			{ // 1�s��
				ParallelGroup pg = layout.createParallelGroup(GroupLayout.Alignment.BASELINE);
				pg.addComponent(line1Label);
				pg.addComponent(line1Text);
				pg.addComponent(line1Button11);
				pg.addComponent(line1Button12);
				vg.addGroup(pg);
			}
			{ // 2�s��
				ParallelGroup pg = layout.createParallelGroup(GroupLayout.Alignment.BASELINE);
				pg.addComponent(line2Label);
				pg.addComponent(line2List);
				pg.addComponent(line2Button2);
				vg.addGroup(pg);
			}
			layout.setVerticalGroup(vg);
		}

���C�A�E�g�̓��I�ύX

�R���|�[�l���g�i�p�l���E�y�C���E�E�B���h�E�i�t���[���j�E�_�C�A���O�j�ɓo�^���ꂽ���C�A�E�g�}�l�[�W���[�́A���̃R���|�[�l���g�̃T�C�Y���ς��ƁA�����I�ɓ����̃R���|�[�l���g�̈ʒu��T�C�Y���v�Z�������B[2009-04-05]
�i�����������ׂ̈Ƀ��C�A�E�g�}�l�[�W���[�Ƃ������̂�����͂��j

�����A�ꍇ�ɂ���ẮA�E�B���h�E�T�C�Y�̕ύX���ɓ���̃R���|�[�l���g�����Ǝ��ɃT�C�Y��ς������Ƃ������������邩������Ȃ��B
�������������ׂɂ́A�T�C�Y�ύX�̃C�x���g��ߑ����A�ύX�O�Ɋe�R���|�[�l���g�̃T�C�Y��ݒ肵�����΂悢�B

�R���|�[�l���g�̃T�C�Y���ύX���ꂽ���Ƃ����m����C�x���g�́AComponentListener#componentResized()�B
���������̃C�x���g�́A�T�C�Y���ύX���ꂽ���ɔ�������B���������āA����̖ړI�ɂ͎g���Ȃ��B

�i�������T�C�Y�ύX�O�ɔ�������C�x���g�E���X�i�[��������������Ȃ������̂Łj
�R���|�[�l���g�Ń��C�A�E�g�ύX���ɌĂ΂��doLayout()���I�[�o�[���C�h����Ηǂ������B


���C�A�E�g�}�l�[�W���[�̓���

�Ǝ��̃��C�A�E�g�}�l�[�W���[�����ɂ́ALayoutManager�C���^�[�t�F�[�X�i���邢�͂������炳��ɔh�����Ă���LayoutManager2�C���^�[�t�F�[�X�j����������B[2009-09-26]

�������ׂ����\�b�h
���\�b�h�� �Ă΂��^�C�~���O �������ׂ����e
LayoutManager addLayoutComponent(���O, �R���|�[�l���g) �@ �@
LayoutManager2 addLayoutComponent(�R���|�[�l���g, ����) �R���e�i�ɃR���|�[�l���g���lj����ꂽ�ۂɌĂ΂��B �R���|�[�l���g���ɓƎ��̐���i�ʒu���Ƃ��j����������ꍇ�A�����Ŏ����̒��ɕێ����Ă����B
�iHashMap<�R���|�[�l���g, ����>�Ƃ��j
LayoutManager removeLayoutComponent(�R���|�[�l���g) �@ �@
LayoutManager preferredLayoutSize(�R���e�i) �R���e�i#getPreferredSize()���Ă΂ꂽ���B �����T�C�Y��Ԃ��B
LayoutManager minimumLayoutSize(�R���e�i) �R���e�i#getMinimumSize()���Ă΂ꂽ���B �ŏ��T�C�Y��Ԃ��B
LayoutManager2 maximumLayoutSize(�R���e�i) �@ �ő�T�C�Y��Ԃ��B
new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE)�Ƃ��B
LayoutManager2 getLayoutAlignmentX(�R���e�i)
getLayoutAlignmentY(�R���e�i)
�@ �@
LayoutManager2 invalidateLayout(�R���e�i) ���C�A�E�g�������ɂȂ�ۂɌĂ΂��B �ێ����Ă���ʒu�E�T�C�Y���̃N���A�B
�K�v�Ȃ���Ζ������ł悢�B
LayoutManager layoutContainer(�R���e�i) �R���|�[�l���g��z�u�i�\���j����ۂɌĂ΂��B �R���e�i���̑S�R���|�[�l���g�ɑ΂��A�ʒu�E�T�C�Y��ݒ肷��B
�i�S�R���|�[�l���g = �R���e�i#getComponents()�j
�i�R���|�[�l���g#setBounds()���Ăяo���Đݒ�j
�i�ʒu����ɂ̓R���e�i#getInsets()���l���ɓ����j

��

class MyLayout implements LayoutManager2 {
	�`
}
		Container c = frame.getContentPane();
		c.setLayout(new MyLayout());

		JTextField f1 = new JTextField();
		c.add(f1);	//���̒��ŁAaddLayoutComponent(f1, null)���Ă΂��B
		frame.setVisible(true);	//���ꂪ���s�����ƁA
					//invalidateLayout()���iJDK1.6�̏ꍇ��2��j�Ă΂�A���̌��
					//layoutContainer()���Ă΂��B

�i�t���[�����h���b�O���āj�T�C�Y�ύX�i���T�C�Y�j����ƁA�܂�invalidateLayout()���Ă΂�A����layoutContainer()���Ă΂��B


Swing�ڎ��֖߂� / Java�ڎ��֖߂� / �V�@�\�֖߂�
���[���̑��M��F�Ђ�����

�@

�@

�@

�@

�@

�@

�@

�@

�@

�@

�@

�@

�@

�@

�@