java 标签自动字体大小



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

这是我

的理解。 您的标签宽度是固定的(假设为 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();

  }

最新更新