Как вы центрируете текст в объекте и позволяете ему перемещаться вместе с объектом - PullRequest
0 голосов
/ 06 мая 2018

Итак, у меня есть овал, и я хочу, чтобы в нем можно было указать свое имя, чтобы при перемещении овала имя оставалось посередине.

Кроме того, когда я repaint(), как мне очистить, что там сначала, чтобы не было нескольких объектов?

Вот мой текущий код:

public void paint(Graphics g)
{

    g.setColor(Color.GREEN);
    g.drawOval(spot, spot, 200, 200);

    int spotName = spot +60;
    int spotName_2 = spot_2 + 100;
    String text = "Name";
    g.drawString(text, spotName, spotName_2);


    //add image
    g.drawImage(image, 0, 0, this);

 }

1 Ответ

0 голосов
/ 06 мая 2018

Текст должен быть центрирован внутри круга:

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), и это может заставить ее работать.

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