帮助圈子中的姓名和号码的位置

时间:2011-09-05 07:25:10

标签: java

这是我的Circle课程

import java.awt.*;

public class Circle
{
  private int diameter, x, y;
  private Color color;
  private String name, number;

  public Circle(int x, int y,  String number, String name, Color color,int diameter)
  {
    this.x = x;
    this.y = y;
    this.name = name;
    this.color = color;
    this.number = number;
    this.diameter = diameter;

  }

  public void draw(Graphics page)
  {
    page.setColor(color);
    page.fillOval(x, y, diameter, diameter);
    page.drawString(name, x, y);
    page.drawString(number, x, y);
    page.drawRect(150, 100, 30, 100);   // rectangle   
    page.fillRect(150, 100, 30, 100);
  }
}

这是我的TablePanel

import javax.swing.*;
import java.awt.*;

public class TablePanel extends JPanel
{
  private Circle circle1, circle2, circle3, circle4, circle5, circle6;

  public TablePanel()
  {
    circle1 = new Circle(150, 60,"1", "Murray", Color.blue, 30);
    circle2 = new Circle(210, 100,"2", "Anne", Color.pink, 30);
    circle3 = new Circle(210, 190,"3", "Roger", Color.blue, 30);
    circle4 = new Circle(150, 220, "4", "Bella", Color.pink, 30);
    circle5 = new Circle(90, 190,"5", "Colin", Color.blue, 30);
    circle6 = new Circle(90, 100,"6", "Josie", Color.pink, 30);

    setPreferredSize (new Dimension(300, 300));
    setBackground(Color.white);
  }

  public void paintComponent (Graphics page)
  {
    super.paintComponent(page);

    circle1.draw(page);
    circle2.draw(page);
    circle3.draw(page);
    circle4.draw(page);
    circle5.draw(page);
    circle6.draw(page);
  }
}

最后这是我的应用程序类

import javax.swing.JFrame;

public class Table
{
  public static void main (String[] args)
  {
    JFrame frame = new JFrame("Table Setting");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.getContentPane().add(new TablePanel());

    frame.pack();
    frame.setVisible(true);
  }
}

假设在不同性别的不同颜色的桌子周围显示座位安排,这在我跑的时候工作得非常好但是我似乎无法将名字和数字座位放在圆圈的中间位置在顶部。有任何建议如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

int radius = diameter/2;
page.drawString(number, x+radius, y+radius);

这应该会导致String在圆圈中心的左下角呈现。为了使其居中,有必要考虑宽度和宽度。渲染的String的高度。对于后者,请使用FontMetricsTextLayout

答案 1 :(得分:2)

你需要抵消文字;坐标是圆圈左上角的“角落”。

要获得有关该文本的一些信息,我认为你会这样做:

public void draw(Graphics g) {
    FontMetrics metrics = g.getFontMetrics();
    Rectangle2D rect = metrics.getStringBounds(text, g);
    ....

通过该矩形,您可以获得使用getWidth()和getHeight()在方法中放置的任何文本的宽度和高度;然后你可以用

水平居中
x = (diameter - rect.getWidth() ) / 2;

对于高度,你只需要取高度并做x2就可以近似,因为你有两条线,所以

y = (diameter - rect.getHeight() * 2) / 2