我遇到一个问题,让SWT Text控件按照我希望他们在组中的方式进行布局。具体来说,我很难将传递给verticalSpan
的{{1}}反映在GUI资产中。在下面的示例中,我无法正确显示的3个控件是GridData
,descriptionText
和defaultActionText
,但defaultReportActionText
显示正确显示。我不确定我在这里做错了什么,所以我感谢任何反馈!
组:
translationText
翻译控制(按照我的预期工作,宽度为1,高度为3):
paramsFieldComposite = new Group( upperRightComposite, SWT.BORDER );
// TODO: Change group to composite and remove .setText()
paramsFieldComposite.setText( "paramsFieldComposite" );
paramsFieldComposite.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true, 1, 1 ) );
paramsFieldComposite.setLayout( new GridLayout( 2, true ) );
描述/动作控制(不按照我的预期工作,我希望它们的高度均为3而不是1):
Label hostnameLabel = new Label( paramsFieldComposite, SWT.NONE );
hostnameLabel.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false, 1, 1 ) );
hostnameLabel.setText( configResourceBundle.geti18nDisplay( "HostnameLabel" ) );
Label translationLabel = new Label( paramsFieldComposite, SWT.NONE );
translationLabel.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, false, 1, 1 ) );
translationLabel.setText( configResourceBundle.geti18nDisplay( "TranslationLabel" ) );
hostnameText = new TextControl( paramsFieldComposite, SWT.BORDER );
hostnameText.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, false, 1, 1 ) );
hostnameText.setEditable( true );
translationText = new TextControl( paramsFieldComposite, SWT.BORDER | SWT.V_SCROLL | SWT.WRAP );
translationText.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, false, 1, 3 ) );
translationText.setEditable( true );
以下是GUI的样子。
答案 0 :(得分:-1)
translationText
和defaultActionText
的行为之间的差异很容易解释。
你告诉他们要跨越3行。但是,虽然这三行translationText
的高度由其他Widgets
(hostnameText
,instanceLabel
,instanceText
)定义,但事实并非如此defaultActionText
。这三行中没有其他小部件(defaultReportActionText
除外)。所以高度将设置为必要的高度。
您可以通过设置heightHint
:
GridData
来手动增加此高度
GridData data = new GridData( SWT.FILL, SWT.FILL, true, false, 1, 3 );
data.heightHint = 80;
defaultActionText.setLayoutData(data);
defaultReportActionText.setLayoutData(data);
结果可以在这里看到:
要获得更精确的身高结果,您可以使用:
data.heightHint = hostnameText.computeSize(SWT.DEFAULT, SWT.DEFAULT).y
+ instanceLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT).y
+ instanceText.computeSize(SWT.DEFAULT, SWT.DEFAULT).y;