0

我有一个 SWT 标签,它显示从文件加载的不同单行文本。有没有办法自动调整字体大小,以便在出现长文本时字体大小变小并且标签仍然显示全文?当 Label 没有这个属性时,是否可以使用 font 和 fontsize 来计算 String 的大小?

4

1 回答 1

0

这是我的理解。您的标签宽度是固定的(假设为 200)。您读取的字符串需要 300 像素才能适合当前字体。您可以使用以下方法计算绘制所需的尺寸GC.textExtent(String)

试试这个工作示例

  private static boolean setText(Label label, String txt, Font font)
  {

    int height = font.getFontData()[0].getHeight();
    GC gc = new GC(label);
    gc.setFont(font);
    Point size = gc.textExtent(txt);
    Rectangle bounds = label.getBounds();
    int diff = bounds.width-size.x;
    if(diff >= 0 || height <=2)
    {
      label.setFont(font);
      label.setText(txt);
      return true;
    }
    else
    {

      String name = font.getFontData()[0].getName();
      int style = font.getFontData()[0].getStyle();
      FontData data = new FontData(name, Math.max(1,height-1), style);
      Font newFont = new Font(Display.getCurrent(), data);
      if(!setText(label, txt, newFont))
      {
        newFont.dispose();
      }
    }
    gc.dispose();
    return false;
  }

  public static void main(String[] args) {



    Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setSize(600, 300);

    Label label = new Label(shell, SWT.NONE);
    label.setBounds(20, 20, 100, 50);
    setText(label, "hello stackoverflow!!!!!!", Display.getDefault().getSystemFont());
    shell.open();


    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();


  }
于 2012-09-20T16:59:53.773 回答