Сделать строку по центру в прямоугольнике - PullRequest
0 голосов
/ 05 июня 2019

У меня есть координаты прямоугольника для рисования, и я хочу центрировать некоторый текст внутри этого прямоугольника.

int x, y, width, height;
String str = "This is a text";

x = 15;
y = 15;
width = 20;
heights = 30;

g.drawRect(x, y, width, height);
g.drawString(str, x + width/2, y + height/2);

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Если вы хотите центрировать текст, вам нужно знать длину текста, чтобы вы знали его ширину относительно ширины прямоугольника.Это делается путем получения экземпляра FontMetrics из объекта Graphics.

Таким образом, базовый код будет выглядеть так:

FontMetrics fm = g.getFontMetrics();
int stringWidth = fm.getStringWidth(...);
int xDiff = (width - stringWidth) / 2;
g.drawString(str, x + xDiff, ...);

Конечно, вам также нужно центрироваться на основе высоты.

0 голосов
/ 05 июня 2019

Док говорит ...

public abstract void drawString(String theString,
              int x,
              int y)
Renders the text of the specified iterator applying its attributes in accordance with the specification of the TextAttribute class.
The baseline of the leftmost character is at position (x, y) in this graphics context's coordinate system.

Итак ... вы рисуете свою строку, начиная с центральной точки прямоугольника, но не строку.

https://docs.oracle.com/javase/7/docs/api/java/awt/FontMetrics.html - получить метрику шрифта от gc и выяснить, насколько широкая строка. Затем вычтите половину этого из начала х. Сделайте что-то подобное для y (помните, что высота не начинается с основания.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...