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

Использование менеджера компоновки BoxLayout. Как я уже ранее замечал, у BoxLayout очень интересный механизм выравнивания компонентов. В зависимости от того, каким образом BoxLayout располагает компоненты внутри себя (по вертикали или по по горизонтали), выравнивание задается соответственно. Если BoxLayout вертикальный (BoxLayout.Y_AXIS), то каждому компоненту задать выравнивание по левому краю, по центру или по правому краю. Если BoxLayout горизонтальный (BoxLayout.X_AXIS), то выравнивать можно по верху, по центру или по низу. Для того, чтобы не нагружать лишним текстом с объяснением особенностей выравнивания по вертикали, давайте посмотрим тестовый пример, который нам все демонстрирует.

А теперь небольшое описание тестового примера. На форме имеется панель JPanel. Панель использует BoxLayout, которой при создании передавался параметр BoxLayout.X_AXIS, который говорит вдоль какой оси располагать компоненты. В данном случае вдоль оси X. На панель JPanel помещается три кнопки, для которой можно задавать выравнивание независимо от других кнопок. Делается это путем нажатия на кнопку. Как только кнопка была нажата, срабатывает обработчик. Обработчик меняет надпись на кнопке, которая информирует о том, какая константа была передана методу setAlignmentY — JComponent.TOP_ALIGNMENT (выравнивание по верхнему краю), JComponent.CENTER_ALIGNMENT (выравнивание по центру) или JComponent.BOTTOM_ALIGNMENT (выравнивание по нижнему краю).

import java.awt.BorderLayout;
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.X_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.getAlignmentY();
					String title = "";
					if(align == JComponent.TOP_ALIGNMENT) {
						align = JComponent.CENTER_ALIGNMENT;
						title = "CENTER_ALIGNMENT";
					} else if (align == JComponent.CENTER_ALIGNMENT) {
						align = JComponent.BOTTOM_ALIGNMENT;
						title = "BOTTOM_ALIGNMENT";
					} else {
						align = JComponent.TOP_ALIGNMENT;
						title = "TOP_ALIGNMENT";
					}
					button.setText(title);
					button.setAlignmentY(align);					
				}												
			}			
		};
		
		Font font = new Font("Verdana", Font.PLAIN, 11);

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

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

		JButton button3 = new VerticalButton("TOP_ALIGNMENT", false);
		panel.add(button3);
		button3.setAlignmentY(JComponent.TOP_ALIGNMENT);
		button3.setMaximumSize(new Dimension(100, 250));
		button3.addActionListener(listener);
		button3.setFocusable(false);
		button3.setFont(font);
		
		frame.getContentPane().add(panel, BorderLayout.CENTER);
		
		frame.setPreferredSize(new Dimension(250, 250));
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setResizable(false);
		frame.setVisible(true);
	}

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

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s

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