Московский государственный университет имени М.В.Ломоносова
Опубликован: 01.11.2004 | Доступ: свободный | Студентов: 11275 / 456 | Оценка: 4.12 / 4.01 | Длительность: 19:20:00
ISBN: 978-5-9556-0077-9
Специальности: Программист
Лекция 27:

Библиотека классов JDK. Основы построения интерфейса пользователя на языке Java. Компоновки и элементы управления

Кнопки

Кнопки могут располагаться в контейнере как отдельно, так и в группе.

Пакет java.awt содержит следующие классы кнопок и групп:

  • Button - командная кнопка.
  • Checkbox - флажок или радиокнопка (переключатель).
  • CheckboxGroup - группа кнопок.

Пакет облегченных swing-компонентов также предоставляет несколько классов кнопок и групп, включая следующие классы:

  • JButton - кнопка.
  • JRadioButton - радиокнопка.
  • JToggleButton - кнопка-переключатель.
  • JCheckBox - флажок
  • ButtonGroup - группа кнопок.

На кнопках из пакета javax.swing помимо метки может также отображаться и пиктограмма.

Класс Button позволяет создавать объекты "командные кнопки". При нажатии на кнопку JVM инициирует событие действия actionPerformed. Наряду с данным семантическим событием, инициируется ряд простых событий, таких как mouseClicked.

Класс Button предоставляет ряд методов, включая следующие:

  • AddActionListener - регистрирует блок прослушивания для события действия от командной кнопки;
  • GetActionCommand - возвращает имя команды, инициировавшей событие действия, или метку кнопки, если имя команды равно null (значение по умолчанию);
  • GetLabel - возвращает метку командной кнопки или null для непомеченной командной кнопки;
  • SetLabel - изменяет метку командной кнопки.

Класс Checkbox позволяет создавать компоненты кнопки двух типов, называемые флажками и радиокнопками. Такой компонент может иметь два состояния: включено (true) и выключено (false). Каждый щелчок на компоненте изменяет его состояние на обратное.

Несколько переключателей могут быть объединены в группу, используя компонент CheckboxGroup, являющийся контейнером. Такая группа называется группой радиокнопок. Только один компонент группы может одновременно иметь состояние "включен".

Для обработки событий от кнопки используется интерфейс ItemListener. Этот интерфейс определяет всего один обработчик события - метод itemStateChanged (ItemEvent e).

Класс ItemEvent содержит метод getStateChange, позволяющий определить состояние кнопки. Метод может возвращать одно из двух возможных значений:

  • ItemEvent.SELECTED;
  • ItemEvent.DESELECTED.

Например:

// Определение состояния кнопки
void itemStateChanged(ItemEvent e) {
   if (e.getStateChange()  == ItemEvent.SELECTED)
        { // Кнопка находится во включенном состоянии
        }
  }

Для добавления кнопки в группу для нее следует вызвать метод setCheckboxGroup, указав в качестве параметра объект типа CheckboxGroup.

Следующий листинг иллюстрирует создание флажков и группы радиокнопок:

import java.applet.Applet;
import java.awt.*;
public class MyApplet extends Applet {
  Panel panel1 = new Panel();
  GridLayout gridLayout1 = new GridLayout();
	// Создание новой кнопки:
  Checkbox checkbox1 = new Checkbox();		
  Checkbox checkbox2 = new Checkbox();
  
  GridLayout gridLayout2 = new GridLayout();
  Panel panel2 = new Panel();
	// Создание группы кнопок:
  CheckboxGroup checkboxGroup1 = new CheckboxGroup();
  Checkbox checkbox4 = new Checkbox();
  Checkbox checkbox5 = new Checkbox();
  Checkbox checkbox6 = new Checkbox();
  FlowLayout FlowLayout1 = new FlowLayout();
public MyApplet() {
   try {   jbInit();  } catch(Exception e) { }
  }
public static void main(String[] args) {
  MyApplet myApplet1 = new MyApplet();  }
private void jbInit() throws Exception {
  setLayout(gridLayout2);
  panel1.setLayout(gridLayout1);
  checkbox1.setLabel("Флажок 1");		
  checkbox2.setLabel("Флажок 2");
  checkbox2.setState(true); // Состояние флажка - 
                            // включен
  gridLayout2.setRows(2);
  panel2.setLayout(FlowLayout1);
   // Добавление в группу трех кнопок:
  checkbox4.setCheckboxGroup(checkboxGroup1);
  checkbox4.setLabel("Радиокнопка 1");
  checkbox4.setState(true); // Состояние радиокнопки - 
                            // включена 
    checkbox5.setCheckboxGroup(checkboxGroup1);
    checkbox5.setLabel("Радиокнопка 2");
    checkbox6.setCheckboxGroup(checkboxGroup1);
    checkbox6.setLabel("Радиокнопка 3");
// Добавление кнопок в контейнеры - панели
    this.add(panel1, null);
       panel1.add(checkbox1, null);
       panel1.add(checkbox2, null);
    this.add(panel2, null);
       panel2.add(checkbox4, null);
       panel2.add(checkbox5, null);
       panel2.add(checkbox6, null);
  }
}
Листинг 27.2.

Классы кнопок пакета javax.swing наследуются от класса AbstractButton. Этот класс предоставляет ряд общих методов, включая следующие:

  • doClick - выполнение щелчка мыши на кнопке программным способом;
  • getText - возвращает метку кнопки;
  • setText - устанавливает метку кнопки;
  • isSelected - определяет состояние кнопки и возвращает true, если переключаемая кнопка находится в состоянии "включена";
  • setSelected - устанавливает состояние кнопки;
  • setMargin - устанавливает отступы между рамкой кнопки и меткой;
  • setIcon - определяет пиктограмму, используемую по умолчанию. Эта пиктограмма используется для состояния кнопки "нажатая" или "недоступная" в том случае, если для этих состояний не указана иная пиктограмма;
  • setPressedIcon - определяет пиктограмму для нажатого ("pressed") состояния кнопки;
  • setSelectedIcon - устанавливает пиктограмму для выделенного ("selected") состояния кнопки;
  • setRolloverIcon - устанавливает пиктограмму для нажатого ("rollover") состояния кнопки (одновременно могут быть нажаты несколько кнопок);
  • setDisabledIcon - устанавливает пиктограмму для недоступного состояния кнопки.

    Например:

    ImageIcon ImageIcon1= new 
                          ImageIcon("myicon.gif");
    jButton1.setDisabledIcon(ImageIcon1);
  • setDisabledSelectedIcon - устанавливает пиктограмму недоступного для выделения состояния кнопки;
  • setVerticalAlignment - определяет выравнивание по вертикали для пиктограммы и метки, которое может указываться следующими значениями:
    • SwingConstants.CENTER (по умолчанию);
    • SwingConstants.TOP;
    • - SwingConstants.BOTTOM ;
  • setHorizontalAlignment - определяет выравнивание по горизонтали для пиктограммы и метки, которое может указываться следующими значениями:
    • SwingConstants.RIGHT (по умолчанию);
    • SwingConstants.LEFT ;
    • SwingConstants.CENTER ;
    • SwingConstants.LEADING ;
    • SwingConstants.TRAILING ;
  • setVerticalTextPosition - определяет позицию текста по вертикали относительно пиктограммы, которая может указываться следующими значениями:
    • SwingConstants.CENTER (по умолчанию);
    • SwingConstants.TOP ;
    • SwingConstants.BOTTOM ;
  • setHorizontalTextPosition - определяет позицию текста по горизонтали относительно пиктограммы, которая может указываться следующими значениями:
    • SwingConstants.RIGHT (по умолчанию);
    • SwingConstants.LEFT ;
    • SwingConstants.CENTER ;
    • SwingConstants.LEADING ;
    • SwingConstants.TRAILING.
  • setActionCommand - задает команду действия для кнопки;
  • getActionCommand - возвращает строку, которая содержит команду действия, установленную для данной кнопки;
  • setMnemonic - определяет код символа, используемого как ключ-акселератор (ALT+данный символ).

Например:

jButton1.setMnemonic(KeyEvent.VK_A);

Для того чтобы определить в методе обработки события itemStateChanged(ItemEvent e), какой кнопкой было инициировано данное событие, следует использовать метод getItemSelectable.

Для того чтобы определить, является ли кнопка, инициировавшая событие, выделенной (находящейся в состоянии "включена" или "нажата"), следует использовать метод getStateChange.

Например:

if (e.getItemSelectable() == 
         jCheckBox1 && e.getStateChange()==e.SELECTED) { 
 }

Класс JToggleButton предназначен для создания кнопок, имеющих два состояния - "нажата" и "не нажата". Компонент JToggleButton может находится в зафиксированном нажатом состоянии (быть выделенным).

Этот класс является непосредственным суперклассом для классов JCheckbox и JRadioButton.

Для того чтобы установить состояние кнопки, следует использовать метод setSelected .

Например:

jToggleButton1.setSelected(true);

Кнопки JToggleButton могут быть объединены в группу. Такую группу следует предварительно создать, используя компонент типа javax.swing.ButtonGroup. Только одна из кнопок группы может одновременно иметь нажатое состояние.

Александр Демьяненко
Александр Демьяненко

Можно ли сдавать один и тот же тест несколько раз?
Или же один и тот же тест можно сдать лишь однажды?

Максим Стогний
Максим Стогний

Добрый день!

Скажите, пожалуйста, если в терминологии объектно-ориентированного программирования функции также называются методами или методами - членами класса, в примере объявления указателя на метод использовали в формальном описании оба названия:

тип_метода (имя_класса::*имя_метода_указателя)
    (список параметров);
тип_функции (*имя_ функции_указателя)
    (список параметров);

при этом можно было  тип_функции во втором описании заменить на тип_метода? Т.е.:

тип_метода (*имя_ метода_указателя)
    (список параметров);