java - 如何从 JFace 的 TitleAreaDialog 中的 Tab 键顺序中删除 messageLabel

标签 java eclipse swt jface

我正在寻找一种方法来从扩展 TitleAreaDialog 的类中的 Tab 键顺序中删除 messageLabel(在图像中用红色箭头强调)。目前的解决方法如下所示:

getButton(IDialogConstants.CANCEL_ID).addTraverseListener(new TraverseListener() {
  @Override
  public void keyTraversed(TraverseEvent e) {
    if (e.detail == SWT.TRAVERSE_TAB_NEXT) {
      e.doit = false;
      textUsername.forceFocus();
    }
  }
});

我目前的解决方法是在最上层和最下层的复合 Material 中监听 TraverseEvent 并手动将焦点强制到正确的复合 Material 。

但是,我正在寻找一个更通用的解决方案,它可以在我们产品中的每个实例的 CommonTitleAreaDialog 类中实现。

enter image description here

最佳答案

我看到了两种可能的方法来概括您的方法。

  1. 您可以尝试操纵标题图像标签父级的 Tab 键顺序,该标签与消息标签具有相同的父级

    getTitleImageLabel().getParent().setTabList( new Control[ 0 ] );
    
  2. 或者您可以将 TraverseListener 添加到按钮栏的最后一个按钮 (getButtonBar()) 以更改选项卡遍历并跳转到第一个可聚焦控件.要找到第一个控件,您可以连接到 createDialogArea() 并开始从它返回的控件中搜索正确的控件。 沿着这些线的东西:

    @Override
    protected Control createDialogArea( Composite parent ) {
      Control startPoint = super.createDialogArea( parent );
      Control firstControl = null;
      if( startPoint instanceof Composite ) {
        Composite composite = ( Composite )startPoint;
        Control[] children = composite.getChildren();
        for( Control control : children ) {
          if( ( control.getStyle() & SWT.NO_FOCUS ) == 0 ) {
            firstControl = control;
            break;
          }
        }
      }
      return parent;
    }
    

    可能需要更改代码以递归搜索第一个合适的控件。

两者都需要扩展TitleAreaDialog,并且在一定程度上依赖于该类的实现细节。例如,如果为标题图像标签指定了一个额外的父级,则 setTabList() 将对错误的组合进行操作。

关于java - 如何从 JFace 的 TitleAreaDialog 中的 Tab 键顺序中删除 messageLabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38309824/

相关文章:

java - SWT 复合对齐

java - 如何使用java连接到远程mssql 2005并在预定时间导入mysql表中的csv值?

java - 如何在 Java 中迭代每个纬度/经度

android-sdk\docs\reference 丢失

java - Springframework 无法解析 Controller 上的配置类

java - Mac 上的 SWT 和 Swing

java - 我可以在 SWT FileDialog 过滤器中隐藏文件扩展名吗?

java - MVC GET Controller ,带有 . PathVariable 中的 [dot] 值

java - Android/Java Json 对象数

windows - Tess4J 在 64 位 Windows 中独立工作,但在 Tomcat 7 中失败