SWT对话框系列:让对话框支撑方向键选择

在SWT 3.3中弹出的对话框比如确认对话框,可以通过Tab键在对话框按钮之间来回选择,但是无法通过键盘方向键来选择,这就让Windows的爱好者很不习惯,其实我自己使用起来也不习惯。 <!--endfragment-->  其实让SWT的对话框支持方向键选择有好几种方案

  A方案:将平台迁移到Eclipse 3.4+,这个方法在SWT 3.4+中解决了

  B方案:可以自己实现这个功能!

  我们可以继承 org.eclipse.jface.dialogs.MessageDialog  这个类,比如就叫MessageDialog2,然后重写父类中的 createButtonsForButtonBar(Composite parent)  方法,比如可以参考我的实现方法:

 
protected   void  createButtonsForButtonBar(Composite parent) {
    
super .createButtonsForButtonBar(parent);
    
int  columns  =  ((GridLayout) parent.getLayout()).numColumns;
    
if (columns  <   2 )
      
return ;
    
for  ( int  i  =   0 ; i  <  columns; i ++ ) {
      Button button 
=  getButton(i);
      
int  index  =  (i  +   1   <  columns  ?  i  +   1  : i - 1 );
      
final  Button otherButton  =  getButton(index);
      button.addKeyListener(
new  KeyAdapter() {
        
public   void  keyPressed(KeyEvent e) {
          
if  (e.keyCode  ==  SWT.ARROW_RIGHT  ||  e.keyCode  ==  SWT.ARROW_LEFT) {
            otherButton.setFocus();
          }
        }
      });
    }
  }

   然后在MessageDialog2方法重写 openQuestion(Shell parent, String title, String message) 方法,

参考实现:    

  public   static   boolean  openQuestion(Shell parent, String title, String message,  boolean  defaultTrue) {
    MessageDialog2 dialog 
=   new  MessageDialog2(UIUtil.getActiveShell(), title,  null , message, QUESTION,  new  String[] {
        IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL }, defaultTrue 
?   0  :  1 );
    
return  dialog.open()  ==   0 ;
  }

<!--endfragment-->

上面方法的defaultTrue是指焦点是否默认在"确认"按钮上面。
<!--endfragment--><!--endfragment--><!--endfragment--><!--endfragment-->

使用方法:

<!--endfragment-->

MessageDialog2.openQuestion(getShell(),”确认操作”,”是否要执行XX操作 ? ”, false );
<!--endfragment-->

 
  默认焦点为”否”按钮上,当然,你也可以使用键盘方向键选择"是"按钮

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值