Пример создания меню c помощью SWT

Patrick
2005-03-14

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

Если у вас есть какие-то вопросы - пишите. Это не окончательный вариант статьи и в ближайшее время она будет дорабатываться.

Hosted by uCoz