package edu.ch4;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.*;public class Guanli {
 
  public static void main(String[] args){
  Display display=new Display();//创建一个display对象。
      final Shell shell=new Shell(display);//shell是程序的主窗体
      
      Shell shell1=new Shell();
     // shell1.getShell(Jiemian);
      //getShell
      shell.setText("人事管理系统");
      Menu mainMenu=new Menu(shell,SWT.BAR);
      shell.setMenuBar(mainMenu);
      {
          //"文件"项
          MenuItem fileItem=new MenuItem(mainMenu,SWT.CASCADE);
          fileItem.setText("文件");
          Menu fileMenu=new Menu(shell,SWT.DROP_DOWN);
          fileItem.setMenu(fileMenu);
          MenuItem newFileItem=new MenuItem(fileMenu,SWT.CASCADE);
          newFileItem.setText("登录选项");
          newFileItem.addSelectionListener(new SelectionAdapter(){
           public void widgetSelected(SelectionEvent e){
             
           }
           });
 
          new MenuItem(fileMenu, SWT.SEPARATOR);
          MenuItem newFileItem1=new MenuItem(fileMenu,SWT.CASCADE);
          newFileItem1.setText("新建1");
          newFileItem1.setEnabled(false);
          //newFileItem1.setVisible(false);

      }

      shell.pack();
      shell.open();
      while(!shell.isDisposed()){
      display.sleep();
      //如果主窗体没有关闭则一直循环
      if(!display.readAndDispatch()){ //如果display不忙
      //休眠
      }
      }
      display.dispose();
      }
      
      //销毁display
    
}上面我想点“登陆选项”菜单选项,然后打开另一个叫Jiemian的类里面的shell窗口(这个类里面有main方法,是我做好的登录界面,这个类的代码我贴出来)那么“登陆选项”菜单选项 里面的监听事件应该怎么写?
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.*;public class Jiemian {
   public static void main(String[] args)
   {
   
   
   Display display=new Display();
   final Shell shell=new Shell(display);
   shell.setText("系统登录");
   shell.setSize(300, 300);
   
    Label lb1=new Label(shell,SWT.NONE);

lb1.setText("请输入姓名:");
lb1.setBounds(20,50,70,20);
final Text text1=new Text(shell,SWT.BORDER);
text1.setBounds(100,49,70,20);

Label lb2=new Label(shell,SWT.NONE);

lb2.setText("请输入年龄:");
lb2.setBounds(20,100,70,20);
final Text text2=new Text(shell,SWT.BORDER);
text2.setBounds(100,100,70,20);
Button bt=new Button(shell,SWT.NONE);
bt.setBounds(20,150,70,20);
bt.setText("确定");
   
bt.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
MessageBox dialog=new MessageBox(shell,SWT.OK|SWT.ICON_INFORMATION);
dialog.setText("组件选择事件");
dialog.setMessage("您的姓名是:"+text1.getText()+"您的年龄是:"+text2.getText());
dialog.open();
}
});

Button bt1=new Button(shell,SWT.NONE);
bt1.setBounds(100,150,70,20);
bt1.setText("重置");
   
bt1.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
text1.setText("");
text2.setText("");

}
}
);

   shell.open();
   while(!display.isDisposed())
   {
display.sleep();
if(!display.readAndDispatch())
{

}
   }
  
   display.dispose();
   }
   
   
}

解决方案 »

  1.   

    为你要点击打开新窗口的菜单项添加响应事件。
    如:xxx.addMouseListener(new MouseAdapter() {
       doclick() {
           new newJFrame();
       }
    })
      

  2.   

    2楼的Menuitem没有addMouseListener的。。
    我改为
     newFileItem.addSelectionListener(new SelectionAdapter(){
               public void widgetSelected(SelectionEvent e) {
               new Jiemian();
               }
             });然后怎么样才能让Jiemian显示呢?Jiemian这个类是包含main方法的,我已经做好的一个登陆界面
     
      

  3.   

     newFileItem.addSelectionListener(new SelectionAdapter(){
               public void widgetSelected(SelectionEvent e) {
              Jiemian zhuan= new Jiemian();//main().setVisible(true); 
              zhuan.open();
              zhuan.pack();
               }
             });我事件改为这个。。把Jiemian继承shell为什么。。点了登陆菜单选项弹出来一个窗口,但那个窗口什么都没
      

  4.   

    package edu.ch4;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.SelectionAdapter;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.widgets.*;
    public class Jiemian extends Shell { protected void checkSubclass() {
    // Disable the check that prevents subclassing of SWT components
    }

    public Jiemian(Display display)
    {
    super(display, SWT.SHELL_TRIM);



     Label lb1=new Label(this,SWT.NONE);

    lb1.setText("请输入姓名:");
    lb1.setBounds(20,50,70,20);
    final Text text1=new Text(this,SWT.BORDER);
    text1.setBounds(100,49,70,20);

    Label lb2=new Label(this,SWT.NONE);

    lb2.setText("请输入年龄:");
    lb2.setBounds(20,100,70,20);
    final Text text2=new Text(this,SWT.BORDER);
    text2.setBounds(100,100,70,20);
    Button bt=new Button(this,SWT.NONE);
    bt.setBounds(20,150,70,20);
    bt.setText("确定");
       
    bt.addSelectionListener(new SelectionAdapter(){
    public void widgetSelected(SelectionEvent e){
    MessageBox dialog=new MessageBox(this,SWT.OK|SWT.ICON_INFORMATION);
    dialog.setText("组件选择事件");
    dialog.setMessage("您的姓名是:"+text1.getText()+"您的年龄是:"+text2.getText());
    dialog.open();
    }
    });

    Button bt1=new Button(this,SWT.NONE);
    bt1.setBounds(100,150,70,20);
    bt1.setText("重置");
       
    bt1.addSelectionListener(new SelectionAdapter(){
    public void widgetSelected(SelectionEvent e){
    text1.setText("");
    text2.setText("");

    }
    }
    );


    }
    public static void main(String[] args)
       {
       
       
    Display display = Display.getDefault();
       final Jiemian shell=new Jiemian(display);
       shell.setText("系统登录");
       shell.setSize(300, 300);
       shell.layout();
       

       shell.open();
       while(!shell.isDisposed())
       {
    display.sleep();
    if(!display.readAndDispatch())
    {

    }
       }
      
       display.dispose();
       }
       
       
    }MessageBox dialog=new MessageBox(this,SWT.OK|SWT.ICON_INFORMATION);编译不通过,为什么?回答了这个问题...给50分- -借帖拉
      

  5.   

    试试这样
    MessageBox messageBox = new MessageBox(this, SWT.OK|SWT.CANCEL|SWT.ICON_WARNING); 你那样提示什么错误啊
      

  6.   

    构造函数 MessageBox(new SelectionAdapter(){}, int)未定义