难以在组内布置SWT文本控件

时间:2012-09-17 16:29:40

标签: java swt

我遇到一个问题,让SWT Text控件按照我希望他们在组中的方式进行布局。具体来说,我很难将传递给verticalSpan的{​​{1}}反映在GUI资产中。在下面的示例中,我无法正确显示的3个控件是GridDatadescriptionTextdefaultActionText,但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的样子。

enter image description here

1 个答案:

答案 0 :(得分:-1)

translationTextdefaultActionText的行为之间的差异很容易解释。

你告诉他们要跨越3行。但是,虽然这三行translationText的高度由其他WidgetshostnameTextinstanceLabelinstanceText)定义,但事实并非如此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);

结果可以在这里看到:

enter image description here

要获得更精确的身高结果,您可以使用:

data.heightHint = hostnameText.computeSize(SWT.DEFAULT, SWT.DEFAULT).y
                + instanceLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT).y
                + instanceText.computeSize(SWT.DEFAULT, SWT.DEFAULT).y;