Текст должен быть центрирован внутри круга:
int spotNameX = spot+100-((g.getFontMetrics().stringWidth(text)/2));
int spotNameY = spot+100;
g.drawString(text, spotNameX, spotNameY);
spot
- крайняя левая сторона круга (крайняя левая позиция x
). Если мы добавим к нему 100
(половину 200
, то есть половину ширины круга), мы получим позицию x
в точном центре круга. Однако, если бы мы нарисовали текст здесь, это было бы слишком далеко - чтобы быть в центре, половина текста должна быть на левой стороне, а половина должна быть на правой стороне.
Таким образом, для правильного центрирования необходимо получить ширину текста в пикселях , а затем разделить ее пополам и вычесть ее из ранее вычисленного значения.
Другими словами:
(крайняя левая сторона + половина ширины) - (половина ширины объекта к центру) = начальная x координата объекта к центру
Что касается вашего другого вопроса, он должен автоматически очиститься при вызове Swing функции paint(Graphics g)
. Если это не так, попробуйте добавить
super.paint(g);
как первая строка внутри вашей функции paint(Graphics g)
, и это может заставить ее работать.