Использование менеджера компоновки BoxLayout. Часть 2. Выравнивание компонентов по горизонтали

Использование менеджера компоновки BoxLayout. Выравнивание Определяя расположение компонентов графического интерфейса пользователя при помощи BoxLayout, бывает необходимым задать выравнивание компонентов. Выравнивание компонентов в BoxLayout реализовано интересным образом, поэтому для демонстрации особенностей выравнивания я сделал тестовый пример. Пример демонстрирует то, как меняется расположение компонентов в BoxLayout в зависимости от выбранных параметров выравнивания.

Достаточно внятно понять, как работает выравнивание компонентов в BoxLayout так и не смог, поэтому решил на тестовом примере посмотреть всю кухню. Но даже после этого объяснять, что и как дело непростое — нужно смотреть.

В качестве примера, BoxLayout компонует три кнопки. При нажатии на кнопку, меняется её горизонтальное выравнивание. Выравнивание меняется циклически. Изменение выравнивания выполняется при помощи метода setAlignmentX. В качестве параметра методу передается одна из констант JComponent — LEFT_ALIGNMENT, CENTER_ALIGNMENT или RIGHT_ALIGNMENT. В примере, как только пользователь нажимает на кнопку, выравнивание по оси X меняется, а конкретное значение выравнивания можно определить по надписи. То, каким образом выравнивание влияет на расположение кнопок в тестовом приложении можно посмотреть ниже на рисунках.

Использование менеджера компоновки BoxLayout. Выравнивание компонентов

Использование менеджера компоновки BoxLayout. Выравнивание компонентов

Использование менеджера компоновки BoxLayout. Выравнивание

Чтобы самим убедиться и посмотреть особенности выравнивания BoxLayout, предлагаю посмотреть и запустить у себя тестовый пример, код которого приведен ниже. Надеюсь это упростит понимание и поможет.

import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestFrame extends JFrame {
	
	public static void createGUI() {
		JFrame frame = new JFrame("Test frame");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JPanel panel = new JPanel();
		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
		
		ActionListener listener = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Object source = e.getSource();
				if(source instanceof JButton) {
					JButton button = (JButton) e.getSource();
					float align = button.getAlignmentX();
					String title = "";
					if(align == JComponent.LEFT_ALIGNMENT) {
						align = JComponent.CENTER_ALIGNMENT;
						title = "CENTER_ALIGNMENT";
					} else if (align == JComponent.CENTER_ALIGNMENT) {
						align = JComponent.RIGHT_ALIGNMENT;
						title = "RIGHT_ALIGNMENT";
					} else {
						align = JComponent.LEFT_ALIGNMENT;
						title = "LEFT_ALIGNMENT";
					}
					button.setAlignmentX(align);
					button.setText(title);
				}												
			}			
		};
		
		Font font = new Font("Verdana", Font.PLAIN, 11);

		JButton button1 = new JButton("LEFT_ALIGNMENT");
		panel.add(button1);
		button1.setAlignmentX(JComponent.LEFT_ALIGNMENT);
		button1.setMaximumSize(new Dimension(160, 100));
		button1.addActionListener(listener);
		button1.setFocusable(false);
		button1.setFont(font);

		JButton button2 = new JButton("LEFT_ALIGNMENT");
		panel.add(button2);
		button2.setAlignmentX(JComponent.LEFT_ALIGNMENT);
		button2.setMaximumSize(new Dimension(200, 100));
		button2.addActionListener(listener);
		button2.setFocusable(false);
		button2.setFont(font);

		JButton button3 = new JButton("LEFT_ALIGNMENT");
		panel.add(button3);
		button3.setAlignmentX(JComponent.LEFT_ALIGNMENT);
		button3.setMaximumSize(new Dimension(250, 100));
		button3.addActionListener(listener);
		button3.setFocusable(false);
		button3.setFont(font);
		
		frame.getContentPane().add(panel);
		
		frame.setPreferredSize(new Dimension(300, 220));
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame.setDefaultLookAndFeelDecorated(true);
				createGUI();
			}
		});
	}
}

Думаю, что механизм выравнивания по вертикали у BoxLayout работает аналогичным образом.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: