Простые SWT компоненты. Класс Label

Класс Label предназначен для вывода текста, изображений, вертикальных или горизонтальных разделителей. Выводимый текст или изображение могут изменяться только программным путем. Экземпляр класса Label не получает фокус ввода при перемещении курсора, например, клавишей Tab или при кликании по нему мышкой. Обработчики событий неприменимы для данного класса, несмотря на то, что класс Label является наследником класса Control. Для создания экземпляра класса Label используется следующий конструктор:

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 год в рубрике программирование :: разное

©1997-2024 Компьютерная газета