所以我有一个椭圆形,我想把我的名字放在里面,这样当我移动椭圆形的时候,名字就在中间。
另外,当我使用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);
}发布于 2018-05-06 03:53:38
以下内容应以圆圈为中心:
int spotNameX = spot+100-((g.getFontMetrics().stringWidth(text)/2));
int spotNameY = spot+100;
g.drawString(text, spotNameX, spotNameY);spot是圆的最左边(其最左边的x位置).如果我们把100加到它上( 200的一半,也就是圆的一半宽),我们就得到了圆的精确中心的x位置。然而,如果我们在这里画文本,那么它就太远了--不能以中心为中心,一半的文本需要在左边,一半需要在右边。
因此,要正确地居中,您需要get the width of the text in pixels,然后将其除以一半,并从先前计算的值中减去它。
换句话说:
(最左边+宽度的一半)-(物体到中心的宽度的一半)=从物体到中心的开始x坐标
关于您的另一个问题,当Swing调用paint(Graphics g)函数时,它应该会自动清除。如果没有,请尝试添加
super.paint(g);作为paint(Graphics g)函数中的第一行,这可能会使它正常工作。
https://stackoverflow.com/questions/50195248
复制相似问题