2011-09-05 63 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合作伙伴中添加一個「幻數」。 –