在 SWT 标签中以粗体显示部分文本,以斜体显示部分文本

Display some part of text in bold and some part in italic in SWT label

我必须向用户显示一些警告消息,例如

"If you restore data the updated changes will be lost, So recheck once"

在德语中,我也必须使用相同的粗体和斜体字符串。

在两种语言中,对话框的高度和宽度应该相同

public class BoldTextMessageDialog extends ZedisTrayDialog {

  private Composite container;
  private String firstSring;
  private String secondString;
  private String boldString;
  private Button restoreButton;
  private Button cancelButton;

  public BoldTextMessageDialog(Shell shell, String firstSring, String   secondString, String boldString) {
    super(shell);
    this.firstSring = firstSring;
    this.secondString = secondString;
    this.boldString = boldString;
  }

  @Override
  protected Control createDialogArea(Composite parent) {

    container = new Composite(parent, SWT.NONE);
    container.setLayout(new FormLayout());
    GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);

    gd.heightHint = 300;
    gd.widthHint = 500;
    container.setLayoutData(gd);

    Label warningLabel = new Label(container, SWT.NONE);
    warningLabel.setImage(parent.getDisplay().getSystemImage(SWT.ICON_WARNING));

    FormData fd = new FormData();
    fd.left = new FormAttachment(0, 5);
    fd.top = new FormAttachment(0, 5);
    warningLabel.setLayoutData(fd);

    Label firstLabel = new Label(container, SWT.WRAP);
    firstLabel.setText(firstSring);

    fd = new FormData();
    fd.left = new FormAttachment(warningLabel, 10);
    fd.right = new FormAttachment(100, 0);
    fd.top = new FormAttachment(0, 10);
    firstLabel.setLayoutData(fd);

    Label secLabel = new Label(container, SWT.WRAP);
    secLabel.setText(boldString);
    secLabel.setFont(FontCache.getBoldFont());

    fd = new FormData();
    fd.top = new FormAttachment(0, 25);
    fd.left = new FormAttachment(0, 48);
    secLabel.setLayoutData(fd);

    Label thirdLabel = new Label(container, SWT.WRAP);
    thirdLabel.setText(secondString);

    fd = new FormData();
    fd.top = new FormAttachment(0, 25);
    fd.left = new FormAttachment(secLabel, 3);
    fd.right = new FormAttachment(100, -5);
    thirdLabel.setLayoutData(fd);

    return parent;
  }

}

这是我尝试过的方法,但问题是对于德语和英语,斜体和粗体文本出现在不同的位置,因此对于相同的大小它们不合适。如果我使用不同的尺寸没关系。

要在 SWT 中显示样式文本,您可以使用 Browser 小部件或 StyledText 小部件。在这两种情况下,您可能需要将默认外观和行为更改为类似标签(即背景颜色,只读)

浏览器小工具

Browser browser = new Browser( parent, SWT.NONE );
browser.setText( "If you restore data the changes will be <b>lost</b>, So <i>recheck</i> once" );

样式文本

StyledText text = new StyledText( parent, SWT.NONE );
text.setText( "If you restore data the changes will be lost, So recheck once" );

通过 StyleRange,您可以定义文本部分的格式。样式范围有一个 start 和一个 length 指定应用它的文本部分,还有一个 TextStyle 控制要应用的样式属性。要让第一个字符显示为粗体,代码如下所示:

StyleRange styleRange = new StyleRange( 0, 1, null, null, SWT.BOLD );
text.setStyleRanges( new StyleRange[]{ styleRange } );

FormText

如果您已经依赖 org.eclipse.ui.forms,还有一个选择是使用 FormText 小部件。它支持文本中的 HTML 类标记,类似于浏览器小部件。这可能是最像标签的小部件,但拖入了额外的依赖项。