如何计算Label的最大拟合字体大小?

时间:2012-11-27 04:28:26

标签: java linux eclipse swt jface

我的Canvas包含Label。我想根据画布大小设置此标签的字体大小。 我们怎么做到这一点?

编辑:“包含”表示Canvas和Label界限相同。

EDIT2:我有这个用于Swing,但我无法将其转换为SWT;

Font labelFont = label.getFont();
String labelText = label.getText();
int stringWidth = label.getFontMetrics(labelFont).stringWidth(labelText);
int componentWidth = label.getWidth();
double widthRatio = (double)componentWidth / (double)stringWidth;
int newFontSize = (int)(labelFont.getSize() * widthRatio);
int componentHeight = label.getHeight();
int fontSizeToUse = Math.min(newFontSize, componentHeight);

EDIT3: 这是我的标签

的字体大小计算器类
public class FitFontSize {
    public static int Calculate(Label l) {
        Point size = l.getSize();
        FontData[] fontData = l.getFont().getFontData();
        GC gc = new GC(l);

        int stringWidth = gc.stringExtent(l.getText()).x;

        double widthRatio = (double) size.x / (double) stringWidth;
        int newFontSize = (int) (fontData[0].getHeight() * widthRatio);

        int componentHeight = size.y;
        System.out.println(newFontSize + " " + componentHeight);
        return Math.min(newFontSize, componentHeight);
    }
}

这是我窗户顶部的标签。我想要根据图层大小的体积来确定字体大小。

    Label l = new Label(shell, SWT.NONE);
    l.setText("TITLE HERE");
    l.setBounds(0,0,shell.getClientArea().width, (shell.getClientArea().height * 10 )/ 100);
    l.setFont(new Font(display, "Tahoma", 16,SWT.BOLD));
    l.setFont(new Font(display, "Tahoma", FitFontSize.Calculate(l),SWT.BOLD));

1 个答案:

答案 0 :(得分:9)

我刚刚移植了上面的代码。

您可以使用方法String获取SWT中GC.stringExtent();的范围(长度),并且您需要类FontData来获取{{的字体高度和字体宽度1}}。

Label

来源: