- 介紹
菜單(Menu類、MenuItem類)是常用的SWT組件,Menu是一個菜單欄,也是一個容器,可以容納MenuItem。Menu的容器作用主要體現在以下兩個方面:
1.作為整個菜單體系的容器。
2.作為同一菜單欄下多級菜單的分割容器。
在下面的代碼中您將認識到這一點。
Menu式樣
SWT.BAR : 菜單欄,用于主菜單。
SWT.DROP_DOWN : 下拉菜單用于子菜單。
SWT.POP_UP : 鼠標右鍵彈出式菜單。
MenuItem式樣
SWT.CASCADE : 有子菜單的菜單項。
SWT.CHECK : 選中后前面帶小鉤。
SWT.PUSH : 普通型菜單項。
SWT.RADIO : 選中后前面帶一小點。
SWT.SEPERATOR : ---- 分隔符.
演示代碼
public class MethodUtil {
public void buildMenus(){
Display display = new Display();
Shell shell = new Shell(display);
Label label = new Label(shell,SWT.BORDER|SWT.RIGHT);
label.setBounds(10, 10, 120, 140);
label.setText("這里是標簽");
label.setFont(new Font(display,"宋體",14,SWT.BOLD));
label.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
//這里指定是主菜單,且菜單方向是從右到左排列
Menu mainMenu = createMenu(shell, SWT.BAR|SWT.RIGHT_TO_LEFT);
shell.setMenuBar(mainMenu);
MenuItem fileMenuItem = createMenuItem(mainMenu, SWT.CASCADE, "文件&F", null, SWT.CONTROL+'f', true, null);
Menu fileMenu = createMenu(shell, SWT.DROP_DOWN, fileMenuItem, true);
MenuItem createItem = createMenuItem(fileMenu, SWT.CASCADE, "新建&C", null, SWT.CONTROL+'c', true, null);
Menu createMenu = createMenu(shell, SWT.DROP_DOWN, createItem, true);
/*采用反射機制調用調用事件處理方法*/
Class[] c = new Class[1];
Object[] o = new Object[1];
c[0] = Label.class;
o[0] = label;
MenuItem createProject = createMenuItem(createMenu, SWT.PUSH, "項目\tControl+Shit+N", null, SWT.CONTROL+SWT.SHIFT+'N', true, "changeContent",c,o);
MenuItem createPackege = this.createMenuItem(createMenu, SWT.PUSH, "包&I", null, SWT.CONTROL+'I', true, null);
MenuItem createClass = this.createMenuItem(createMenu, SWT.PUSH, "類&K", null, SWT.CONTROL+'K', true, null);
MenuItem open = this.createMenuItem(fileMenu, SWT.PUSH, "打開&S", null, SWT.CONTROL+'S', true, null);
MenuItem exit = this.createMenuItem(fileMenu, SWT.PUSH, "關閉&S", null, SWT.CONTROL+'M', true, null);
MenuItem help = this.createMenuItem(mainMenu, SWT.PUSH, "幫助&H", null, SWT.CONTROL+'H', true, null);
shell.pack();
shell.open();
while(!shell.isDisposed()){
if(!display.readAndDispatch()){
display.sleep();
}
}
display.dispose();
}
public void changeContent(Label label){
label.setText("我變,我變,我變變變!創建工程!");
}
protected Menu createMenu(Menu parent, boolean enabled) {
Menu m = new Menu(parent);
m.setEnabled(enabled);
return m;
}
protected Menu createMenu(MenuItem parent, boolean enabled) {
Menu m = new Menu(parent);
m.setEnabled(enabled);
return m;
}
protected Menu createMenu(Shell parent, int style) {
Menu m = new Menu(parent, style);
return m;
}
protected Menu createMenu(Shell parent, int style,
MenuItem container, boolean enabled) {
Menu m = createMenu(parent, style);
m.setEnabled(enabled);
container.setMenu(m);
return m;
}
protected Menu createPopupMenu(Shell shell) {
Menu m = new Menu(shell, SWT.POP_UP);
shell.setMenu(m);
return m;
}
protected Menu createPopupMenu(Shell shell, Control owner) {
Menu m = createPopupMenu(shell);
owner.setMenu(m);
return m;
}
protected MenuItem createMenuItem(Menu parent, int style, String text,
Image icon, int accel, boolean enabled,
String callback,Class[] c,Object[] o){
MenuItem mi = new MenuItem(parent, style);
if (text != null) {
mi.setText(text);
}
if (icon != null) {
mi.setImage(icon);
}
if (accel != -1) {
mi.setAccelerator(accel);
}
mi.setEnabled(enabled);
if (callback != null) {
registerCallback(mi, this, callback,c,o);
}
return mi;
}
protected MenuItem createMenuItem(Menu parent, int style, String text,
Image icon, int accel, boolean enabled,
String callback) {
MenuItem mi = new MenuItem(parent, style);
if (text != null) {
mi.setText(text);
}
if (icon != null) {
mi.setImage(icon);
}
if (accel != -1) {
mi.setAccelerator(accel);
}
mi.setEnabled(enabled);
if (callback != null) {
registerCallback(mi, this, callback);
}
return mi;
}
protected void registerCallback(final MenuItem mi,
final Object handler,
final String handlerName) {
mi.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
try {
Method m = handler.getClass().getMethod(handlerName, null);
m.invoke(handler, null);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
});
}
protected void registerCallback(final MenuItem mi,final Object handler,final String handlerName,final Class[] cs,final Object[] params){
mi.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
try {
Method m = handler.getClass().getMethod(handlerName, cs);
m.invoke(handler, params);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
});
}
}
/*調用測試*/
public class MenuTestDesign {
public static void main(String[] arg){
MethodUtil u = new MethodUtil();
u.buildMenus();
}
}
運行結果:

posted on 2009-08-13 17:01
zhangxl 閱讀(1176)
評論(0) 編輯 收藏 所屬分類:
SWT、SWING、AWT