SWT标签中的文本对齐错误

时间:2011-08-30 13:29:56

标签: java layout swt

我正在尝试做一些非常简单的事情,即将产品版本号添加到RCP应用程序的启动画面。所以我的代码是这样的:

class ARMSplashHandler extends EclipseSplashHandler {
  private Font font; 
  private int heightInPx = 12;

  private int fontHeightInPt(Display display, int heightInPx) {
    return 72 * heightInPx / display.getDPI().y;
  }

  @Override void init(Shell splash) {
    Product product = Platform.getProduct();
    Display display = splash.getDisplay();
    FontData fontData = splash.getFont.getFontData()[0];
    fontData.setHeight(fontHeightInPt(display, fontHeightInPx));
    font = new Font(display, fontData);
    splash.setBackgroundMode(SWT.INHERIT_DEFAULT);
    splash.setText(product.getName());
    splash.setFont(font);
    String version = "v"+product.getDefiningBundle().getHeaders().get("Bundle-Version");
    String versionLocString = product.getProperty("versionLocation");
    String versionColorString = product.getProperty("versionColor");
    Rectangle versionLoc = StringConverter.asRectangle(versionLocString, new Rectangle(405, 260, 45, 12));
    Color versionColor = new Color(display, StringConverter.asRGB(versionColorString, new RGB(193, 202, 212)));
    CLabel versionLabel = new CLabel(splash, SWT.CENTER | SWT.BORDER);
    versionLabel.setForeground(versionColor);
    versionLabel.setFont(font);
    versionLabel.setBounds(versionLoc);
    versionLabel.setText(version);

    splash.addDisposeListener(new DisposeListener {
      void widgetDisposed(DisposeEvent e) { 
        versionColor.dispose();
        font.dispose();
      }
    });
    super.init(splash);
  }

这样可以正常工作(除了Mac上的问题我会在一个单独的问题中询问;当然,边框仅用于调试):

enter image description here

但如果我将CLabel替换为Label,则会发生这种情况:

enter image description here

它不像预期那样居中。如果我将对齐设置为RIGHT(这是我真正想要的),它会完全消失。最初我认为问题只是没有足够的空间,但增加矩形的高度并不能解决问题,宽度肯定足够大:

enter image description here

这是某种预期的行为吗?或者一个SWT错误(我当然不希望在这个基本的东西中有一个)?

0 个答案:

没有答案