【问题标题】:How do you center text in a object and allow it to move around with the object如何在对象中居中文本并使其随对象移动
【发布时间】:2018-10-16 03:22:53
【问题描述】:

所以我有一个椭圆形,我希望能够把我的名字放进去,这样当我移动椭圆形时,名字就会留在中间。

还有当我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);

 }

【问题讨论】:

  • 一种方法,在缓冲图像上绘制,然后在绘画方法中绘制图像。另外,阅读 Swing 绘画教程,看看你做错了什么(例如,没有超级方法调用和覆盖错误的方法)
  • 对不起,我不明白

标签: java awt


【解决方案1】:

以下内容应使文本在圆圈内居中:

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) 函数中的第一行,这可能会使其正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 2015-07-23
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多