Swing: кнопка с двумя состояниями

 

В библиотеке swing наряду с обычной кнопкой есть кнопка с двумя состояниями - нажатом и отжатом. Она работает приблизительно как checkbox, только выглядеть по-другому. Для создания такой кнопки в приложении мы используем класс JToggleButton.

 

Вот пример использования такой кнопки:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class MyFrame

extends JFrame {

// Переменная для кнопки.

public JToggleButton button;

// Конструктор.

public MyFrame(){

// Устанавливаем размеры и расположение.

setLocation(400, 200);

setSize(200, 200);

setTitle("Title");

// Задаем контейнер для компонентов.

Container con = getContentPane();

con.setLayout(new FlowLayout());

 

// Создание кнопки (срузу нажатой).

button = new JToggleButton("Press me", true);

// Добавление кнопки к контейнеру.

con.add(button);

// Добавление обработчика для кнопки.

button.addItemListener(new ItemListener(){

public void itemStateChanged(ItemEvent e){

// Изменение заголовка окна.

if(button.isSelected())

{

setTitle("Button is selected");

}

else

{

setTitle("Button isn't selected");

}

 

}

});

}

 

public static void main(String[] args) {

// Создание главного окна.

new MyFrame().setVisible(true);

}

 

public void windowClosing(WindowEvent ev) {

System.exit(0);

}

}

 

Часть нашей программы, в которой мы создаем окно, такая же, как и выше. Отличие только в том, что мы используем класс JToggleButton. С ним мы работаем как всегда - создаем экземпляр, вызываем конструктор (обратите внимание, что в конструкторе мы поставили второй параметр в true, что означает, что кнопка уже нажата), добавляем кнопку к контейнеру и добавляем обработчик для изменения состояния кнопки, в котором мы просто меняем заголовок нашей программы. Обратите внимание, что мы при добавлении этого обработчика указываем itemStateChanged - т. е. нас интересует не столько нажатие на кнопку, сколько изменение ее состояния.

 

После запуска нашей программы полуаем ожидаемый результат - кнопку с двумя состояниями (при этом в нажатом состоянии кнопка более темная):