После написания первой статьи мне как-то не очень хотелось разбираться еще в одной библиотеке для построения 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-файла из предыдущей статьи, не забудьте изменить название исходного файла для компиляции и класса для запуска.
Если у вас есть какие-то вопросы - пишите.