Простые SWT компоненты. Класс Label
Класс Label предназначен для вывода текста, изображений, вертикальных или горизонтальных разделителей. Выводимый текст или изображение могут изменяться только программным путем. Экземпляр класса Label не получает фокус ввода при перемещении курсора, например, клавишей Tab или при кликании по нему мышкой. Обработчики событий неприменимы для данного класса, несмотря на то, что класс Label является наследником класса Control. Для создания экземпляра класса Label используется следующий конструктор:
public Label (Composite parent, int style)
где parent — обязательный родительский компонент (контейнер), а style — один или несколько стилей, определяющих параметры создания класса Label.
Рис. 1. Label. Иерархия классов
Рис. 2. Компонент Label. Изображение в визуальном редакторе
Стили
Стили формируют битовую маску по принципу логического ИЛИ. Для объединения стилей используется символ |.
Label может находиться одновременно только в одном из трех режимов работы:
1) вывод текста;
2) вывод изображения;
3) вывод разделителя.
Замечание
При необходимости выводить сразу и текст, и изображение можно воспользоваться классом CLabel.
Текст
Для задания текста, выводимого классом Label, используется следующий метод:
public void setText (String text)
Текст может содержать разделители и мнемоники. Символ & указывает, что следующий за ним символ будет рассматриваться как мнемоника. Когда пользователь набирает на клавиатуре комбинацию символов мнемоники, то родительский объект получает фокус. Для большинства платформ символы мнемоник выделяются подчеркиванием, но могут выделяться и другим способом, который зависит от платформы. Если необходимо вывести в тексте символ &, то его надо набрать два раза подряд.
Метод
public String getText()
возвращает текст или пустую строку, если текст не задавался или использовалась маска SWT.SEPARATOR для объекта Label.
Изображение
Для задания изображения предназначен метод
public void setImage(Image image)
Если image равно null, то изображение выводиться не будет.
Метод
public Image getImage()
возвращает изображение или null (если изображение не установлено) объекта Label.
Разделители
Если не установлен флаг разделителя SWT.SEPARATOR, то будет изображен разделитель. Тип разделителя определяется значением маски SWT.HORIZONTAL для горизонтального разделителя и SWT.VERTICAL для вертикального разделителя. Выпуклость устанавливается одним из атрибутов SHADOW_IN, SHADOW_OUT и SHADOW_NONE. Разделители часто используются для формирования разделительных линий между компонентами.
Замечание
Визуальный вид разделителя зависит от настроек операционной системы.
Выравнивание
Если не установлен флаг разделителя SWT.SEPARATOR, то можно задать метод выравнивания текста или изображения объекта Label. Для этого служит метод
public void setAlignment(int alignment)
где аргумент alignment может принимать значения SWT.LEFT, SWT.RIGHT или SWT.CENTER для выравнивания по левому краю, правому краю или по центру соответственно.
Метод:
public int getAlignment()
возвращает метод выравнивания (SWT.LEFT, SWT.RIGHT или SWT.CENTER) текста или изображения объекта Label. Если не установлен флаг разделителя SWT.SEPARATOR, то возвращается значение SWT.NONE.
Замечание
Для разделителей (установлен флаг SWT.SEPARATOR) выравнивание игнорируется.
Перенос текста
Если при создании объекта Label была указана маска SWT.WRAP, то текст будет разбиваться (переноситься) на строки для более полного заполнения разбиения доступного пространства. Действие маски SWT.WRAP определяется правилами переноса в операционной системе и зависит от выбранной локали.
Замечание
Для формирования принудительного, вне зависимости от маски SWT.WRAP, переноса строки можно использовать символ перевода строки \n.
Пример использования
Пример 1. Пример использования класса Label с различными битовыми масками стилей
package by.bs.swt;
...
public void testLabel() {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Label test");
new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL); //разделитель
Label lblHello = new Label(shell, SWT.NONE); //просто текст
lblHello.setText("Simple Label");
new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL); //разделитель
shell.setLayout(new GridLayout());
Label lblDuke = new Label(shell, SWT.NONE); //Label с картинкой
lblDuke.setImage(new Image(Display.getCurrent(), getClass()
.getResourceAsStream("/by/bs/swt/images/duke_waving.gif")));
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
shell.dispose();
display.dispose();
}
Рис. 3. Результат работы программы
Сергей Бердачук, berdachuk@gmail.com, http://forjava.dev.juga.ru/
public Label (Composite parent, int style)
где parent — обязательный родительский компонент (контейнер), а style — один или несколько стилей, определяющих параметры создания класса Label.
Рис. 1. Label. Иерархия классов
Рис. 2. Компонент Label. Изображение в визуальном редакторе
Стили
Стили формируют битовую маску по принципу логического ИЛИ. Для объединения стилей используется символ |.
Стиль | Описание | Примечание |
SWT.SEPARATOR | вывод разделителя | по умолчанию устанавливается вертикальный разделитель |
SWT.HORIZONTAL | вывод горизонтального разделителя | только один атрибут из SWT.HORIZONTAL и SWT.VERTICAL может быть выбран |
SWT.VERTICAL | вывод вертикального разделителя | |
SWT.SHADOW_IN | вывод разделителя с эффектом выпуклости "внутрь" | может быть выбран только один атрибут из SHADOW_IN, SHADOW_OUT и SHADOW_NONE |
SWT.SHADOW_OUT | вывод разделителя с эффектом выпуклости "наружу" | |
SWT.SHADOW_NONE | явное указание на отсутствие эффекта выпуклости | |
SWT.CENTER | выравнивание по центру | может быть выбран только один атрибут из CENTER, LEFT и RIGHT |
SWT.LEFT | выравнивание влево | |
SWT.RIGHT | выравнивание вправо | |
SWT.WRAP | разбивать(переносить) текст для более полного заполнения занимаемого пространства |
Label может находиться одновременно только в одном из трех режимов работы:
1) вывод текста;
2) вывод изображения;
3) вывод разделителя.
Замечание
При необходимости выводить сразу и текст, и изображение можно воспользоваться классом CLabel.
Текст
Для задания текста, выводимого классом Label, используется следующий метод:
public void setText (String text)
Текст может содержать разделители и мнемоники. Символ & указывает, что следующий за ним символ будет рассматриваться как мнемоника. Когда пользователь набирает на клавиатуре комбинацию символов мнемоники, то родительский объект получает фокус. Для большинства платформ символы мнемоник выделяются подчеркиванием, но могут выделяться и другим способом, который зависит от платформы. Если необходимо вывести в тексте символ &, то его надо набрать два раза подряд.
Метод
public String getText()
возвращает текст или пустую строку, если текст не задавался или использовалась маска SWT.SEPARATOR для объекта Label.
Изображение
Для задания изображения предназначен метод
public void setImage(Image image)
Если image равно null, то изображение выводиться не будет.
Метод
public Image getImage()
возвращает изображение или null (если изображение не установлено) объекта Label.
Разделители
Если не установлен флаг разделителя SWT.SEPARATOR, то будет изображен разделитель. Тип разделителя определяется значением маски SWT.HORIZONTAL для горизонтального разделителя и SWT.VERTICAL для вертикального разделителя. Выпуклость устанавливается одним из атрибутов SHADOW_IN, SHADOW_OUT и SHADOW_NONE. Разделители часто используются для формирования разделительных линий между компонентами.
Замечание
Визуальный вид разделителя зависит от настроек операционной системы.
Выравнивание
Если не установлен флаг разделителя SWT.SEPARATOR, то можно задать метод выравнивания текста или изображения объекта Label. Для этого служит метод
public void setAlignment(int alignment)
где аргумент alignment может принимать значения SWT.LEFT, SWT.RIGHT или SWT.CENTER для выравнивания по левому краю, правому краю или по центру соответственно.
Метод:
public int getAlignment()
возвращает метод выравнивания (SWT.LEFT, SWT.RIGHT или SWT.CENTER) текста или изображения объекта Label. Если не установлен флаг разделителя SWT.SEPARATOR, то возвращается значение SWT.NONE.
Замечание
Для разделителей (установлен флаг SWT.SEPARATOR) выравнивание игнорируется.
Перенос текста
Если при создании объекта Label была указана маска SWT.WRAP, то текст будет разбиваться (переноситься) на строки для более полного заполнения разбиения доступного пространства. Действие маски SWT.WRAP определяется правилами переноса в операционной системе и зависит от выбранной локали.
Замечание
Для формирования принудительного, вне зависимости от маски SWT.WRAP, переноса строки можно использовать символ перевода строки \n.
Пример использования
Пример 1. Пример использования класса Label с различными битовыми масками стилей
package by.bs.swt;
...
public void testLabel() {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Label test");
new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL); //разделитель
Label lblHello = new Label(shell, SWT.NONE); //просто текст
lblHello.setText("Simple Label");
new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL); //разделитель
shell.setLayout(new GridLayout());
Label lblDuke = new Label(shell, SWT.NONE); //Label с картинкой
lblDuke.setImage(new Image(Display.getCurrent(), getClass()
.getResourceAsStream("/by/bs/swt/images/duke_waving.gif")));
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
shell.dispose();
display.dispose();
}
Рис. 3. Результат работы программы
Сергей Бердачук, berdachuk@gmail.com, http://forjava.dev.juga.ru/
Компьютерная газета. Статья была опубликована в номере 21 за 2005 год в рубрике программирование :: разное