Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java标签自动字体大小_Java_Label_Font Size - Fatal编程技术网

java标签自动字体大小

java标签自动字体大小,java,label,font-size,Java,Label,Font Size,我有一个SWT标签,它显示从文件加载的不同单行文本。是否有一种方法可以自动调整字体大小,以便在出现长文本时字体大小变小,标签仍显示全文? 当标签没有这样的属性时,是否可以使用字体和字体大小来计算字符串的大小?我的理解如下。标签宽度是固定的(假设为200)。您读取的字符串需要300像素才能与当前字体匹配。您可以使用GC.textExtent(String) 试试这个有效的例子 private static boolean setText(Label label, String txt, Fon

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

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


  }
private静态布尔setText(标签标签、字符串txt、字体)
{
int height=font.getFontData()[0].getHeight();
GC=新GC(标签);
gc.setFont(字体);
点大小=gc.textExtent(txt);
矩形边界=label.getBounds();
int diff=bounds.width size.x;
如果(差异>=0 | |高度