0

ファイルからロードされたさまざまな単一行テキストを示す SWT ラベルがあります。長いテキストが来るとフォントサイズが小さくなり、ラベルに全文が表示されるようにフォントサイズを自動的に調整する方法はありますか? ラベルにそのようなプロパティがない場合、フォントとフォントサイズを使用して文字列のサイズを計算することは可能ですか?

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 に答える