最近一直在做一个报文模拟器MessageSimulator,其中要实现一个类似eclipse新建文件的功能,需要监听Text文本框的输入。当文本框的输入为空、已存在相同文件的时候,OK键置灰不能点击。

         我用了VerifyListener监听器,和ModifyListener监听器来实现这个功能。VerifyListener监听器通过verifyText(VerifyEvent e)方法响应校验输入事件;ModifyListener监听器通过modifyText(ModifyEvent e)方法响应文本被修改的事件。
 
    /**
     * Create contents of the button bar
     * @param parent
     */
    @Override
    protected void createButtonsForButtonBar(Composite parent) {
       okButton = createButton(parent, IDialogConstants. OK_ID, "保存", true);
       if(operateType.equals("添加")){
           //添加报文类型时,输入名字前不能"保存"
           okButton.setEnabled( false);
       }     
      
       //监听typeNameText的输入,校验输入事件
       typeNameText.addModifyListener( new ModifyListener() {
           public void modifyText( final ModifyEvent arg0) {
              okButton.setEnabled( true);
              tipLabel.setText("");
              String typeName = typeNameText.getText();
              if(!typeName.equals("") && operateType.equals("添加")){
                  //不允许添加已存在的报文类型名
                  File f = new File("conf/message/"+typeName);
                  if(f.isDirectory() || f.isFile()){
                     tipLabel.setText("报文类型名不能重复!");
                     okButton.setEnabled( false);
                  }
              }
           }
       });
      
       createButton(parent, IDialogConstants. CANCEL_ID, "取消", false);
    }
初始的时候,Text文本框没有内容,提示:不能为空,【保存】按键置灰

 

输入321后,【保存】按键可按下了
 
当输入和当前文件重名时,【保存】按键再次置灰,提示:不能重名