После написания первой статьи мне как-то не очень хотелось разбираться еще в одной библиотеке для построения GUI, но SWT меня заинтересовала. Сегодня я расскажу как создать меню с помощью SWT.
Класс Shell
содержит метод setMenuBar
, который принимает в качестве параметра линейку меню. К любому пункту меню можно добавлять слушателя(класс, который обрабатывает события), который вызывается при выборе этого меню.
Сначала создадим само меню – создадим экземпляр класса Menu:
Menu m = new Menu(s, SWT.BAR);
Эта строка создает экземпляр класса Menu и привязывает его к Shell
, объявленному в нашем примере как s
. Так как мы создаем MenuBar, то оно и должно быть BAR. Существует пять стилей кнопок:
SWT.PUSH
– обычная кнопка меню.
SWT.CHECK
– кнопка переключать.
SWT.RADIO
– радио-кнопка.
SWT.SEPARATOR
– разделитель между кнопками.
SWT.DROP_DOWN
- выпадающее меню.
Теперь добавим пункты выпадающего меню File:
final MenuItem file = new MenuItem(m, SWT.CASCADE); file.setText("&File"); final Menu filemenu = new Menu(s, SWT.DROP_DOWN); file.setMenu(filemenu);
Для создания пунктов меню напишем следующее:
final MenuItem openMenuItem = new MenuItem(filemenu, SWT.PUSH); openMenuItem.setText("&Open\tCTRL+O"); openMenuItem.setAccelerator(SWT.CTRL+'O'); //установка горячей клавиши
Чтобы установить слушателя к данному пункту необходимо:
openMenuItem.addSelectionListener(new SelectionListener( ) { public void widgetSelected(SelectionEvent e) { System.out.println("Open"); //действие при выборе меню } public void widgetDefaultSelected(SelectionEvent e) { } });
А теперь напишем полноценный пример. Итак, создадим класс SWTToolbar и сохраним следующий исходный код в файле SWTToolbar.java:
//SwtHelloWorld.java import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.*; import org.eclipse.swt.events.*; public class SWTToolbar { private Display d; private Shell s; SWTToolbar() { d = new Display(); s = new Shell(d); s.setSize(200,200); s.setText("Toolbar"); Menu m = new Menu(s, SWT.BAR); final MenuItem file = new MenuItem(m, SWT.CASCADE); file.setText("&File"); final Menu filemenu = new Menu(s, SWT.DROP_DOWN); file.setMenu(filemenu); final MenuItem openMenuItem = new MenuItem(filemenu, SWT.PUSH); openMenuItem.setText("&Open\tCTRL+O"); openMenuItem.setAccelerator(SWT.CTRL+'O'); final MenuItem saveMenuItem = new MenuItem(filemenu, SWT.PUSH); saveMenuItem.setText("&Save\tCTRL+S"); saveMenuItem.setAccelerator(SWT.CTRL+'S'); final MenuItem separator = new MenuItem(filemenu, SWT.SEPARATOR); final MenuItem exitMenuItem = new MenuItem(filemenu, SWT.PUSH); exitMenuItem.setText("E&xit"); final MenuItem edit = new MenuItem(m, SWT.CASCADE); edit.setText("&Edit"); final Menu editmenu = new Menu(s, SWT.DROP_DOWN); edit.setMenu(editmenu); final MenuItem cutMenuItem = new MenuItem(editmenu, SWT.PUSH); cutMenuItem.setText("&Cut"); final MenuItem copyMenuItem = new MenuItem(editmenu, SWT.PUSH); copyMenuItem.setText("Co&py"); final MenuItem pasteMenuItem = new MenuItem(editmenu, SWT.PUSH); pasteMenuItem.setText("&Paste"); s.setMenuBar(m); openMenuItem.addSelectionListener(new SelectionListener( ) { public void widgetSelected(SelectionEvent e) { System.out.println("Open"); } public void widgetDefaultSelected(SelectionEvent e) { } }); saveMenuItem.addSelectionListener(new SelectionListener( ) { public void widgetSelected(SelectionEvent e) { System.out.println("Save"); } public void widgetDefaultSelected(SelectionEvent e) { } }); exitMenuItem.addSelectionListener(new SelectionListener( ) { public void widgetSelected(SelectionEvent e) { System.exit(0); } public void widgetDefaultSelected(SelectionEvent e) { } }); s.open(); while (!s.isDisposed()) { if (!d.readAndDispatch()) { d.sleep(); } } d.dispose(); } public static void main(String[] args) { new SWTToolbar(); } }Забрать пример
Запустить данный пример можно с помощью Eclipse или с помощью bat-файла из предыдущей статьи, не забудьте изменить название исходного файла для компиляции и класса для запуска.
Если у вас есть какие-то вопросы - пишите.