Java 如何在SWT中为文本添加大小

Java 如何在SWT中为文本添加大小,java,swt,Java,Swt,我创建了一个默认文本为“数据预览”的标签 当我试图将文本(dnyamic)更改为不同的文本时,它只显示“数据预览”大小的文本 如何控制标签的大小 final Composite previewHeader = new Composite(this.previewPanel, SWT.NULL); final GridLayout layout = new GridLayout(); layout.numColumns = 2; layout.marginHeigh

我创建了一个默认文本为“数据预览”的标签

当我试图将文本(dnyamic)更改为不同的文本时,它只显示“数据预览”大小的文本

如何控制标签的大小

    final Composite previewHeader = new Composite(this.previewPanel, SWT.NULL);
    final GridLayout layout = new GridLayout();
    layout.numColumns = 2;
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    previewHeader.setLayout(layout);
    final GridData headerData = new GridData();
    headerData.horizontalAlignment = GridData.FILL;
    headerData.grabExcessHorizontalSpace = true;
    previewHeader.setLayoutData(headerData);

    this.previewLabel = new RichTextLabel(previewHeader, SWT.LEFT); 
    this.previewLabel.setText("<b>Data Preview:</b>"); //$NON-NLS-1$
    final GridData labeldata = new GridData();
    labeldata.grabExcessHorizontalSpace = true;
    labeldata.verticalAlignment = GridData.VERTICAL_ALIGN_END;
    labeldata.verticalSpan = 0;
    labeldata.verticalIndent = 0;
    this.previewLabel.setLayoutData(labeldata);
final Composite previewHeader=new Composite(this.previewPanel,SWT.NULL);
最终GridLayout=新的GridLayout();
layout.numColumns=2;
layout.marginHeight=0;
layout.marginWidth=0;
previewHeader.setLayout(布局);
最终GridData headerData=新GridData();
headerData.horizontalAlignment=GridData.FILL;
headerData.grabExcessHorizontalSpace=true;
previewHeader.setLayoutData(headerData);
this.previewLabel=新的RichTextLabel(PreviewReader,SWT.LEFT);
this.previewLabel.setText(“数据预览:”)//$非NLS-1$
final GridData labeldata=新GridData();
labeldata.grabeExcessHorizontalSpace=true;
labeldata.verticalAlignment=GridData.VERTICAL\u ALIGN\u END;
labeldata.verticalSpan=0;
labeldata.verticalIndent=0;
这个.previewLabel.setLayoutData(labeldata);

您需要对文本的父级调用
layout()
。下面是
Composite#layout()
的javadoc:

如果接收器具有布局,则要求布局布局布局(即设置接收器子级的大小和位置)。如果接收器没有布局,则不执行任何操作

这解决了问题,原因如下:


每次父对象必须布局时,都会确定每个子对象的大小。首次添加标签时,父对象将启动子对象的大小计算。当您稍后更改文本时,这不是自动完成的,因此您必须告诉父级重新布局。

更改文本后是否尝试调用标签父级上的
layout()
?我现在尝试了,它正在工作,谢谢。为什么布局解决了问题?添加了一个解释其工作原理的答案。