Как найти размеры строки, которую вы рисуете с помощью Graphics2D?

Я пытаюсь нарисовать каретку в конце строки, но я не знаю, как получить размеры данной строки, которую я рисую с помощью graphics2d.drawString. Или, если есть «форма», которая на самом деле является строкой с размерами, это поможет, спасибо.


person Manny P    schedule 21.08.2013    source источник
comment
stackoverflow .com/questions/258486/   -  person fmgp    schedule 21.08.2013


Ответы (3)


Вы можете попробовать что-то вроде этого

Graphics2D g2d = ...
Font font = ...
Rectangle2D r = font.getStringBounds("Your_String!", g2d.getFontRenderContext());
System.out.println("(" + r.getWidth() + ", " + r.getHeight() + ")");
person Ruchira Gayan Ranaweera    schedule 21.08.2013

Что-то вроде этого:

    Graphics2D g2d = (Graphics2D) g;
    FontRenderContext frc = g2d.getFontRenderContext();
    GlyphVector gv = g2d.getFont().createGlyphVector(frc, "YOUR_STRING");
    Rectangle rect = gv.getPixelBounds(null, INITIAL_X, INITIAL_Y);

    int width = rect.width;
    int height = rect.height;
person Ivan Babanin    schedule 21.08.2013

Вы можете использовать TextLayout для рисования String. Это очень похоже на фигуры и имеет больше возможностей, чем простое рисование строк.

Font f = new Font(Font.SANS_SERIF, Font.PLAIN, 12);
TextLayout tl = new TextLayout("My String", f, gd2.getFontRenderContext());

// bounds of the TextLayout
Rectangle2D bounds = tl.getBounds();

// draw the text
tl.draw(g2d, x, y)

// position at end
double xEnd = bounds.getWidth() + x;
double yEnd = bounds.getHeight() + y;
Point2D end = new Point2D.Double(bounds.getWidth() + x, bounds.getHeight() + y);
person Daniel Lerps    schedule 21.08.2013