Существует круг (планета), нарисованный через fillOval(). Мне нужно написать текст (число) на круге, чтобы он всегда выравнивался точно в центре. Существует центр круга и его радиус. Я понимаю, что мне нужно рассчитать ширину и длину текста (проверено getStringBounds), но работает неправильно.Текст в центре круга
protected void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
for (Planet planet : planets) {
g2d.setColor(planet.getColor());
g2d.fillOval((int) planet.getX() - planet.getRadius(), (int) planet.getY() - planet.getRadius(),
planet.getRadius() * 2, planet.getRadius() * 2);
g.setFont(new Font("Serif", Font.PLAIN, 20));
g.setColor(Color.black);
String s = String.valueOf(250);
FontMetrics fm = g.getFontMetrics();
double textWidth = fm.getStringBounds(s, g).getWidth();
g.setColor(Color.white);
g.drawString(s, (int) ((int) planet.getX() - textWidth/2), ((int) planet.getY() + fm.getMaxAscent()/2));}}
Создайте и опубликуйте небольшую, но простую полную программу, которая иллюстрирует вашу проблему, [MCVE] (http://stackoverflow.com/help/mcve). Для получения подробной информации об этом очень полезном инструменте проверьте ссылку. –
Основная идея кажется ОК (хотя вы можете хотеть '(int) planet.getY() - fm.getMaxAscent()/2)'), так как это не работает? Как далеко находится текст? Какова ценность textWidth, и каково положение планеты? – nos
'но не работает правильно.' - что это значит? Всегда ли это справа/слева/сверху/снизу. Мы не читатели. Мы не можем догадаться, в чем проблема. – camickr