如何从 JFace 的 TitleAreaDialog 中的 Tab 键顺序中删除 messageLabel
How to remove messageLabel from tab order in JFace's TitleAreaDialog
我正在寻找一种方法来从扩展 TitleAreaDialog
的 class 的 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();
}
}
});
我目前的解决方法是在最上层和最下层的复合材料中侦听 TraverseEvent
并手动将焦点强制到正确的复合材料。
但是,我正在寻找更通用的解决方案,可以在 CommonTitleAreaDialog
class 中针对我们产品中的每个实例实施。
我看到了两种可能的方法来概括您的方法。
你可以尝试操纵标题图片标签parent的tab顺序,与消息标签parent相同
getTitleImageLabel().getParent().setTabList( new Control[ 0 ] );
或者您可以将 TraverseListener
添加到按钮栏 (getButtonBar()
) 的最后一个按钮,它会更改选项卡遍历并跳转到第一个可聚焦控件。要找到第一个控件,您可以挂钩 createDialogArea()
并从它 returns 的控件开始搜索正确的控件。
沿着这些线的东西:
@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
,并且在一定程度上依赖这个class的实现细节。例如,如果给标题图像标签额外的 parent,那么 setTabList()
将在错误的合成上运行。
我正在寻找一种方法来从扩展 TitleAreaDialog
的 class 的 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();
}
}
});
我目前的解决方法是在最上层和最下层的复合材料中侦听 TraverseEvent
并手动将焦点强制到正确的复合材料。
但是,我正在寻找更通用的解决方案,可以在 CommonTitleAreaDialog
class 中针对我们产品中的每个实例实施。
我看到了两种可能的方法来概括您的方法。
你可以尝试操纵标题图片标签parent的tab顺序,与消息标签parent相同
getTitleImageLabel().getParent().setTabList( new Control[ 0 ] );
或者您可以将
TraverseListener
添加到按钮栏 (getButtonBar()
) 的最后一个按钮,它会更改选项卡遍历并跳转到第一个可聚焦控件。要找到第一个控件,您可以挂钩createDialogArea()
并从它 returns 的控件开始搜索正确的控件。 沿着这些线的东西:@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
,并且在一定程度上依赖这个class的实现细节。例如,如果给标题图像标签额外的 parent,那么 setTabList()
将在错误的合成上运行。