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