评估路径的边界(仅使用字符串创建)

时间:2018-06-12 16:48:52

标签: java swt

我想用Path绘制一个String并将其置于一个Rectangle中。 问题是我不知道如何评估路径的大小/边界。 我试图使用以正常方式绘制的相同字符串的相应大小(gc.drawString ...)和使用gc.textExtent(String)之后,但显然两个大小不同,因此结果不正常。 ...

你知道如何评估路径的大小,以便以矩形为中心绘制它吗?

问题是绘制带路径的字符串比以正常方式绘制字符串更大。您可以使用这个简单的代码进行验证。

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Path;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

public class ShapeText 
{
    static Path path=null;
    public static void main(String[] args) 
    {
        final Display display = new Display();
        Font font = new Font(display, "Times", 50, SWT.BOLD);
        final Color blue = display.getSystemColor(SWT.COLOR_BLUE);
        final Color red = display.getSystemColor(SWT.COLOR_RED);

        try {

        } catch (SWTException e) {
            System.out.println(e.getMessage());
            display.dispose();
            return;
        }

        Shell shell = new Shell(display);
        shell.addListener(SWT.Paint, new Listener() 
        {
            public void handleEvent(Event e) 
            {   


                path = new Path(display);
                e.gc.setFont(font);
                path.addString("Path is different", 0, 0, font);
                GC gc = e.gc;
                gc.setAntialias(SWT.ON);
                gc.setTextAntialias(SWT.ON);

                gc.setForeground(blue);
                gc.setBackground(blue);
                //gc.fillPath(path);
                gc.drawPath(path);
                gc.setForeground(red);
                gc.drawString("Path is different", 0, 0,true);
            }
        });

        shell.setSize(530,120);

        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }

        path.dispose();
        font.dispose();
        display.dispose();
    }
}

结果如下:

enter image description here

正如您所看到的,用路径绘制的字符串(蓝色)比另一个长(红色)...

0 个答案:

没有答案