КаталогИндекс раздела
НазадОглавление


Работа 13: Построение графического интерфейса пользователя при помощи SWT

Цель работы:

Цель этой работы - познакомить вас с Standard Widget Toolket (SWT) в Eclipse. Точнее, эта работа поможет вам изучить, как использовать один из наиболее популярных менеджеров раскладки: FormLayout, многие элементы (widgets) SWT, как строить графические пользовательские интерфейсы, используя элементы SWT и два шаблона, обсуждаемые в слайдах: View Event Handler Pattern и Complete Update Pattern.

Выполнение работы:

Шаг 1: Не забудьте

Для запуска независимого приложения SWT вы должны установить аргументы VM в закладке Run Wizzard/argument в следующие (обратите внимание на прямые слеши - /):

-Djava.library.path="C:/Program Files/eclipse/plugins/org.eclipse.swt.win32_3.0.0/os/win32/x86"

где C:/Program Files/eclipse заменяется вашим каталогом инсталляции Eclipse.

Шаг 2: Разработка списка To Do

Разработайте представление с именем SecondToDoList, которое аналогично описанному в слайдах, за исключением следующих двух добавлений:

  1. Элементы кнопок имеют фиксированный размер
  2. Добавьте кнопку Delete All, удаляющую все из списка To Do
  3. Разрешайте и запрещайте кнопку Delete All, когда это нужно

Заметьте, что вы должны добавить внешний файл swt.jar в маршрут вашего проекта. Этот файл находится в каталоге подключения SWT каталога инсталляции Eclipse.

Вы можете использовать обеспеченный для вас ToDoListView - находится в Lab13, - который содержит код из слайда, как стартовую точку для нового представления.

Шаг 3: Модель светофора

Разработайте модель светофора, которая является визуальным представлением светофора. Модель светофора обеспечивается, как класс TraficLight, таким образом (ЗАМЕЧАНИЕ: Вы не должны печатать этот код, просто скопируйте предоставленный класс TraficLight в пакет) - находится в Lab 13:

public class TrafficLight { 

    int  currentState;

    // Конструктор, который создает красный светофор
    public TrafficLight() { 
        currentState = 1; 
    }

    // Перевод светофора в следующее состояние
    public int advance() { 
        setState(getState() % 3 + 1);
        return currentState; 
    } 

    // Возврат состояния светофора (как числа от 1 до 3) 
    public int getState() { 
        return currentState; 
    } 

    // Установка состояния светофора (как числа от 1 до 3) 
    // Если число выходит за пределы, не делается ничего 
    public void setState(int newState) { 
        if ((newState > 0) && (newState <4)) 
            currentState = newState; 
    } 
  
    // Возврат строкового представления светофора
    public  String toString() { 
        switch (getState()) { 
            case  1: return  "Red Traffic Light"; 
            case  2: return  "Yellow Traffic Light"; 
            case  3: return  "Green Traffic Light"; 
        }; 
        return  "Broken Traffic Light"; 
    } 
    
    public boolean  isRed() {
    	return  getState() == 1;
    }
    
    public boolean  isYellow() {
        return  getState() == 2;
    }
	   
    public boolean  isGreen() {
         return  getState() == 3;
    }
}

Ваше представление будет содержать следующие элементы:

  1. Текст (Text)
  2. Флажок (CheckButton)
  3. Выпадающий список (Combo)
  4. Три радиокнопки (Radio Button)
  5. Кнопку (Push Button) Advance
  6. Список (List)

Вы можете разместить ваши элементы любым образом, только убедитесь, что они не перекрывают друг друга. Общее размещение может выглядеть так, как показано на картинке ниже.

Целью является иметь представление, отражающее модель. Каждый элемент может быть использован для установки модели, за исключением элемента Text (показан в верхнем левом углу). Например, нажатие на кнопку Advance изменяет состояние семафора. Вы можете выбрать цвет в List или использовать Radio Buttons, или использовать Combo. Установка флажка Auto заставляет цвет циклически меняться каждую секунду. Важной частью вашего решения является то, что независимо от того, какой элемент устанавливает состояние семафора, все другие элементы должны быть изменены для отражения нового состояния.

Для этой работы вы можете найти полезным:

Когда вы создаете разные типы кнопок, вы задаете разные параметры для конструктора кнопки:

pushButton = new  Button(shell, SWT.PUSH);     //создает обычную кнопку
radioButton = new  Button(shell, SWT.RADIO);   //создает радиокнопку
checkBox = new  Button(shell, SWT.CHECK);      //создает флажок

Для создания Timer, который посылает сообщение каждые n миллисекунд, вы используете следующее:

new  javax.swing.Timer (n, new  TimerEventHandler());

Сообщение actionPerformed посылается в TimerEventHandler. Это класс, который вы создаете и используете для выполнения действий через определенные периоды. Например:

private class  TimerEventHandler implements  ActionListener {
      public void  actionPerformed(ActionEvent e) {
                  //Ваш код обработчика должен быть здесь
      }
}

Большинство элементов имеет свойства цвета. Вы можете посмотреть их в конкретных классах, но обычно можно делать следующее.

aButton.setForeground (new  Color(display, 255,0,0));

В этом примере мы устанавливаем цвет переднего плана для кнопки, которая является типом Display, определяемым display. Цвет, который мы выбрали - RED. Аргументом конструктора Color являются значения RGB. В нашем случае мы устанавливаем значение RED в максимум - 255. Вы можете установит значения GREEN и BLUE сами. Подскажем, что YELLOW - это только RED и GREEN.

Выводы:

В этой работе вы использовали SWT в Eclipse, чтобы построить приложение с графическим интерфейсом пользователя.


НазадОглавление
КаталогИндекс раздела