当前位置: 代码迷 >> Web前端 >> SWT对话框系列:让对话框撑持方向键选择
  详细解决方案

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

热度:221   发布时间:2012-08-24 10:00:20.0
SWT对话框系列:让对话框支撑方向键选择

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

?

<!--endfragment-->

? 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 );
  相关解决方案