2011-09-05 66 views
0

名字和号码的位置。这是我的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); 
    } 
} 

它是假设显示不同性别的不同颜色的桌子周围的座位安排,但是当我运行时,这完美地工作我似乎无法将名字和座位置于圈子中间,这是正确的。任何建议如何解决这个问题?

回答

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

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

+0

试图和它的工作是这样这是最简单的方法。谢谢堆 –

2

您需要补偿文本;坐标来自圆圈的左上角。

要获取有关我觉得一些文字信息,你做这样的事情:

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

,并从矩形你可以得到的宽度,你把任何文字在的getWidth(该方法的高度)和的getHeight();然后,你可以可以

x = (diameter - rect.getWidth())/2; 

对于高度水平居中,你可以只是把高度和做X2,因为你有2线接近,所以

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

page.drawString(name,x + 15,y + 15);试过这个,它移动是可以接受的?然而,现在我不能正确地看到名称,即时尝试混乱的颜色,但没有结果,直到现在 –

+0

它移动是完全可以接受的,但请注意,这两个答案都不建议在x/y合作伙伴中添加一个“幻数”。 –