Используем JCheckBox — работаем с флажками

JCheckBox – это название класса Java Swing, который представляет компонент-флажок или чекбокс. Что есть флажок или чекбокс? Это компонент, который имеет два состояния включен и выключен. Причем одно состояние естественно исключает другое. Соответствующее состояние компонента JCheckBox показывается галочкой. Если JCheckBox находится во включенном состоянии – галочка отображается, если в выключенном – галочки нет.

Рассмотрим, как работать с JCheckBox – как создать, что необходимо передать конструктору при этом, как настроить и какие методы при этом использовать, как определить текущее состояние JCheckBox и как узнать о том, что пользователь кликнул мышкой на флажке и поменял его состояние.

У JCheckBox есть несколько конструкторов, самый на мой взгляд используемый – это конструктор, которому необходимо передать строку в качестве параметра. Данная строка будет использоваться в качестве текстовой метки у JCheckBox. Еще JCheckBox позволяет использовать иконки. Как же выглядит флажок Java Swing? А вот так.

На рисунке выше внизу окна тестового приложения располагается три компонента JCheckBox. Правда не один из них не выбран. Но это можно исправить.

Как было написано выше, текст метки JCheckBox передается конструктору в качестве параметра. Однако, если возникнет необходимость сменить текст этой метки, то можно воспользоваться методом setText и передать ему новый текст метки. У всех трёх флажков текст метки располагается справа от галочки. Это тоже можно изменить при помощи метода setHorizontalTextPosition и передать ему в качестве параметра константу JCheckBox.LEFT. Если это сделать, то текст флажка будет располагаться слева так, как показано на рисунке ниже.

Как только JCheckBox настроен, необходимо каким-то образом узнать, когда поменяется состояние компонента. Для этого необходимо добавить к компоненту слушателя, который будет оповещен как только состояние JCheckBox изменится. Слушателю необходимо реализовать интерфейс ItemListener из пакета java.awt.event. Реализовать нужно один единственный метод itemStateChanged, который будет вызываться при смене состояния JСheckBox. Затем нужно только добавить этого слушателя к компоненту при помощи метода addItemListener и передать методу в качестве параметра ссылку на слушателя.

JCheckBox italicBox = new JCheckBox("Italic");
italicBox.addItemListener(new ItemListener() {
	public void itemStateChanged(ItemEvent e) {
		…
	}
});

В приведенном выше фрагменте мы создаем новый JСheckBox флажок и добавляем к нему слушателя. В теле метода itemStateChanged должен располагаться код, который необходимо выполнить при смене состояния флажка. Давайте теперь посмотрим на тестовый пример, снимки окна которого демонстрировались выше.

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class TestFrame extends JFrame {

	public static String TEST_TEXT = "Test text";

	private JLabel label;

	private JCheckBox italicBox = new JCheckBox("Italic");
	private JCheckBox boldBox = new JCheckBox("Bold");
	private JCheckBox underlineBox = new JCheckBox("Underline");

	public TestFrame() {
		super("Test frame");
		createGUI();
	}

	public void createGUI() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JPanel panel = new JPanel();
		panel.setLayout(new BorderLayout());

		label = new JLabel(getText());
		label.setHorizontalAlignment(JLabel.CENTER);
		label.setFont(new Font("Calibri", Font.PLAIN, 30));
		panel.add(label, BorderLayout.CENTER);

		JPanel boxesPanel = new JPanel();

		boxesPanel.add(italicBox);

		italicBox.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				updateText();
			}
		});

		boxesPanel.add(boldBox);

		boldBox.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				updateText();
			}
		});

		boxesPanel.add(underlineBox);

		underlineBox.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				updateText();
			}
		});

		panel.add(boxesPanel, BorderLayout.SOUTH);
		setPreferredSize(new Dimension(250, 200));
		getContentPane().add(panel);
	}

	public void updateText() {
		label.setText(getText());
	}

	private String getText() {
		String text = checkItalic(TEST_TEXT);
		text = checkBold(text);
		text = checkUnderline(text);
		return "<html>" + text + "</html>";
	}

	private String checkItalic(String string) {
		if (italicBox.isSelected()) {
			return "<i>" + string + "</i>";
		}
		return string;
	}

	private String checkBold(String string) {
		if (boldBox.isSelected()) {
			return "<b>" + string + "</b>";
		}
		return string;
	}

	private String checkUnderline(String string) {
		if (underlineBox.isSelected()) {
			return "<u>" + string + "</u>";
		}
		return string;
	}

	public static void main(String[] args) {
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame.setDefaultLookAndFeelDecorated(true);
				TestFrame frame = new TestFrame();
				frame.pack();
				frame.setLocationRelativeTo(null);
				frame.setVisible(true);
			}
		});
	}
}
Advertisements

One Response to Используем JCheckBox — работаем с флажками

  1. JUser says:

    Спасибо за материалы. Просто отличная коллекция уроков.

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s

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