BERDAFLEX Software Systems
Главная > Eclipse > Книги > Графическая java библиотека SWT
  • Получить стабильный поток клиентов на ваш сайт
  • Эффективная работа с email рассылками
  • Доступ к интересам вашей ЦА
  • Оптимизация вашего сайта для поисковых систем Яндекс и Google
  • Нюансы контекстной рекламы Adwords
       Детали на сайте http://shareware-steps.ru
Больше продаж

Button

Класс Button предназначен для создания одного из компонент визуального интерфейса типа Push Button(кнопка), Check Box (флажковый переключатель), Radio Button (радио кнопка), Toggle Button (кнопка с состоянием), которые формируют сообщения в момент нажатия и отпускания.

Для создания экземпляра класса Button используется следующий конструктор:

public Button (Composite parent, int style)

Где parent – обязательный родительский компонент (контейнер), а style это один или несколько определяющий параметры создания компонента Button стилей.

Рисунок 4.4. Button. Иерархия классов

Button. Иерархия классов

Замечание

Наследование класса Button не рекомендуется.

2.1. Стили

Стили формируют битовую маску по принципу логического «ИЛИ». Для объединения стилей используется символ "|".

Стиль Пример Описание Примечание
SWT.ARROW Кнопка с изображением стрелки, направление которой задается дополнительным флагом: UP-вверх, DOWN-вниз, LEFT-влево, или RIGHT-вправо. Допустимо указывать только один из флагов UP, DOWN, LEFT, или RIGHT.
SWT.CHECK Check Box (флажковый переключатель)  
SWT.PUSH Обычная кнопка Данный тип кнопки используется по умолчанию
SWT.RADIO Радио кнопка  
SWT.TOGGLE Кнопка с состоянием  
SWT.FLAT Флаг для установки "Flat"(плоского) стиля изображения кнопки Для различных платформ flat режим отображается по разному. На платформе Win32 при flat режиме объемный контур кнопки не прорисовывается, и кнопки кажутся плоскими.
SWT.BORDER Флаг для прорисовки окантовки вокруг кнопки.  
SWT.LEFT Выравнивание текста по левому краю кнопки или стрелка влево для кнопки типа "SWT.ARROW" Допустимо указывать только один из флагов UP, DOWN, LEFT, или RIGHT.
SWT.RIGHT Выравнивание текста по правому краю кнопки или стрелка влево для кнопки типа "SWT.ARROW"
SWT.CENTER Выравнивание текста по центру кнопки или стрелка влево для кнопки типа "SWT.ARROW"
SWT.UP Cтрелка вверх для кнопки типа "SWT.ARROW"
SWT.DOWN Cтрелка вниз для кнопки типа "SWT.ARROW"

2.2. Текст

Для задания текста text выводимого классом Button используется метод:

public void setText (String text) 

Текст text может содержать мнемоники, но не должен содержать разделители строк. Символ & указывает, что следующий за ним символ будет рассматриваться как мнемоника. Когда пользователь набирает на клавиатуре комбинацию символов мнемоники, то родительский объект получает фокус. Для большинства платформ символы мнемоник выделяются подчеркиванием, но могут выделяться и другим способом, который зависит от платформы. Если необходимо вывести в тексте символ & , то его надо набрать два раза подряд.

Метод:

public String getText()

возвращает текст или пустую строку, если текст не задавался, или использовался флаг ARROW при создании кнопки.

2.3. Изображение

Для задания изображения предназначен метод:

public void setImage(Image image)

Если image равно null , то изображение выводиться не будет.

Метод:

public Image getImage()

возвращает изображение или null (если изображение не установлено) объекта Button.

2.4. Выравнивание

Для задания горизонтального выравнивания текста или изображения объекта Button можно указать стиль выравнивания в конструкторе или воспользоваться методом:

public void setAlignment(int alignment)

Где аргумент alignment может принимать значения SWT.LEFT, SWT.RIGHT или SWT.CENTER для выравнивания по левому краю, правому краю или по центру соответственно. Если кнопка типа ARROW, то alignment указывает одно из направлений стрелки (UP-вверх, DOWN-вниз, LEFT-влево или RIGHT-вправо.).

Метод:

public int getAlignment()

возвращает метод выравнивания (SWT.LEFT, SWT.RIGHT или SWT.CENTER) текста или изображения объекта Button. Если кнопка типа ARROW, то возвращается одно из направлений стрелки (UP-вверх, DOWN-вниз, LEFT-влево или RIGHT-вправо).

Замечание

Выравнивание редко используется в компонентах типа Button. По умолчанию используется предпочтительное значение для конкретной операционной системы.

2.5. Push Button

Рисунок 4.5. Изображение Push Button в визуальном редакторе

Изображение Push Button в визуальном редакторе

Данный тип кнопки используется по умолчанию. При нажатии на нее кнопка переходит с состояние "нажата" и обычно обрабатывается некоторое событие. При отпускании кнопка возвращается в состояние "отжата".

Пример 4.2. Программа создания кнопки типа PUSH и обработки ее нажатия

public void testPushButton() {
    Button button = new Button(shell, SWT.NONE);
    button.setText("кнопка Push");
    button.pack();
    button.addSelectionListener(
            new org.eclipse.swt.events.SelectionAdapter() {
                public void widgetSelected(
                        org.eclipse.swt.events.SelectionEvent e) {
                    MessageBox messageBox = new MessageBox(shell);
                    messageBox.setMessage("Кнопка нажата");
                    messageBox.open();
                }
            });
    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
}

2.6. Toggle Button

Toggle Button это разновидность кнопки Push Button. Если установлен флаг SWT.TOGGLE то при нажатии на кнопку она переходит в состояние "нажата" и остается в таком состоянии до следующего нажатия. Данный вид кнопок используется в качестве альтернативы флажковым переключателям так как обладают двумя устойчивыми состояниями (эффект триггера). Для улучшения восприятия можно в обработчике нажатия кнопки менять изображение, которе наглядно показывало состояние кнопки соответственно функции кнопки в контексте программы.

Пример 4.3. Модуль демонстрирующий состояние кнопки типа SWT.TOGGLE с помощью изображений

buttonSwitch = new Button(shell, SWT.TOGGLE);
buttonSwitch
        .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
            public void widgetSelected(
                    org.eclipse.swt.events.SelectionEvent e) {
                if (buttonSwitch.getSelection()) {
                    buttonSwitch.setImage(new Image(Display
                            .getCurrent(), getClass()
                            .getResourceAsStream(
                                    "/by/bs/swt/images/on.png")));
                } else {
                    buttonSwitch.setImage(new Image(Display
                            .getCurrent(), getClass()
                            .getResourceAsStream(
                                    "/by/bs/swt/images/off.png")));
                }
            }
        });
buttonSwitch.setImage(new Image(Display.getCurrent(), getClass()
        .getResourceAsStream("/by/bs/swt/images/off.png")));
buttonSwitch.pack();

Рисунок 4.6. Демонстрация отображения состояние кнопки типа SWT.TOGGLE с помощью изображений

Демонстрация отображения состояние кнопки типа SWT.TOGGLE с помощью изображений

Пример 4.4. Программа использования кнопки типа SWT.TOGGLE для имитации поведения реальных кнопок радиоприемника

group = new Group(shell, SWT.NONE);
group.setText("Канал 1");
group.setLayout(new FillLayout());

Listener changeChannelListener = new Listener() {
    public void handleEvent(Event e) {
        Control[] children = group.getChildren();
        for (int i = 0; i < children.length; i++) {
            Control child = children[i];
            if (e.widget != child && child instanceof Button
                   && (child.getStyle() & SWT.TOGGLE) != 0) {
                ((Button) child).setSelection(false);
            }
        }
        ((Button) e.widget).setSelection(true);
        group.setText("Канал " + ((Button) e.widget).getText());
    }
};

for (int i = 0; i < 5; i++) {
    Button button = new Button(group, SWT.TOGGLE);
    if (i == 0) {
        button.setSelection(true);
    }
    button.setText("" + (i + 1));
    button.addListener(SWT.Selection, changeChannelListener);
}
group.pack();

Рисунок 4.7. Имитация поведения кнопок радиоприемника

Имитация поведения кнопок радиоприемника

2.7. Check Box

Рисунок 4.8. Изображение Check Box в визуальном редакторе

Изображение Check Box в визуальном редакторе

Флажковый переключатель Check Box чаще всего используется для установки или сброса логических состояний некоторых параметров (флагов) программы.

Пример 4.5. Блок кода создания Check Box кнопок

shell.setLayout(new GridLayout());
Button checkBoxRed = new Button(shell, SWT.CHECK);
checkBoxRed.setText("Красный");
Button checkBoxGreen = new Button(shell, SWT.CHECK);
checkBoxGreen.setText("Зеленый");
checkBoxGreen.setSelection(true);
Button checkBoxBlue = new Button(shell, SWT.CHECK);
checkBoxBlue.setText("Голубой");

Рисунок 4.9. Кнопки типа SWT.CHECK

Кнопки типа SWT.CHECK

2.8. Radio Button

Рисунок 4.10. Изображение Radio Button в визуальном редакторе

Изображение Radio Button в визуальном редакторе

Для создания радиокнопок используется стиль SWT.RADIO. Данный вид кнопок используется для выбора только одной кнопки из множества входящих в группу. Группа кнопок для выбора определяется общим родительским компонентом. При выборе (selection) одной из кнопок остальные кнопки в группе становятся не выбранными. В определенный момент времени может быть выбрана только одна кнопка.

Пример 4.6. Тестовая программа демонстрации SWT.RADIO кнопок

shell.setLayout(new FillLayout());
Group group = new Group(shell, SWT.NONE);
Button radioButton = new Button(group, SWT.RADIO);
radioButton.setText("Один");
Button radioButton1 = new Button(group, SWT.RADIO);
radioButton1.setText("Два");
radioButton1.setSelection(true);
Button radioButton2 = new Button(group, SWT.RADIO);
radioButton2.setText("Три");
group.setLayout(new GridLayout());
Group group2 = new Group(shell, SWT.NONE);
Button radioButton3 = new Button(group2, SWT.RADIO);
radioButton3.setText("Красный");
radioButton3.setSelection(true);
Button radioButton4 = new Button(group2, SWT.RADIO);
radioButton4.setText("Зеленый");
Button radioButton5 = new Button(group2, SWT.RADIO);
radioButton5.setText("Голубой");
group2.setLayout(new GridLayout());

Рисунок 4.11. Кнопки типа SWT.RADIO сгруппированные в разные контейнеры

Кнопки типа SWT.RADIO сгруппированные в разные контейнеры

2.9. Selection (выбор)

Метод:

public void setSelection (boolean selected)

устанавливает состояние выбора для кнопок типов CHECK, RADIO и TOGGLE.

Если кнопка типа CHECK или RADIO, то при selected равном true они включаются (состояние checked ). При selected равном false они выключаются (состояние unchecked ).

Если кнопка типа TOGGLE, то при selected равном true она нажимается (состояние нажата ). При selected равном false она отжимается (состояние отжата ).

Метод:

public boolean getSelection ()

предназначен для чтения состояние выбора кнопок типов CHECK, RADIO и TOGGLE. При выбранном ( checked или нажатом состоянии) возвращает true . В противном случае возвращается false .

Замечание

В отличие от остальных типов кнопок событие SWT.Selection кнопкой типа Push Button не обрабатывается. Для кнопки данного типа метод getSelection() всегда возвращает значение false .

2.10. Указание используемой по умолчанию кнопки

Контейнер shell включает в себя понятие кнопки по умолчанию default button которая выбирается при нажатии пользователем кнопки < Enter > в не зависимости от того, какой компонент в данный момент имеет фокус. Чаще всего данное свойство используется для подтверждения быстрой отмены в диалоговых окнах. Соответственно есть методы getDefaultButton() и setDefaultButton(Button button) для оперирования данным свойством.

Пример 4.7. Указание кнопки по умолчанию

GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;        
Label label = new Label(shell, SWT.NONE);
label.setText("Новый пароль: ");
Text text = new Text (shell, SWT.BORDER);
Button buttonOk = new Button(shell, SWT.NONE);
buttonOk.setText("Изменить");
Button buttonCancel = new Button(shell, SWT.NONE);        
buttonCancel.setText("Отмена");
shell.setDefaultButton (buttonCancel);
shell.setLayout(gridLayout);        
shell.pack();

Рисунок 4.12. Указание кнопки по умолчанию

Указание кнопки по умолчанию
Rambler's Top100 Рейтинг@Mail.ru