2011-09-05 4 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の幅&の高さを考慮する必要があります。後者の場合は、FontMetricsまたはTextLayoutを使用します。

+0

をしようと、それが働いたとそうですそれを行う最も簡単な方法です。ありがとうヒープ –

2

テキストをオフセットする必要があります。座標は円の左上「角」からのものです。

私はあなたがこのような何かを考えるテキストに関するいくつかの情報を取得するには:あなたはのgetWidth(とメソッドに入れ幅とどんなテキストの高さを得ることができます

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

そして、その長方形から)をし、 getHeight();そして、あなたは高さについては

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

で水平にセンタリングすることができますすることができ、あなたは2行を持っているので、ちょうど高さを取るとx2をやって近似することができるので、

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

page.drawString(名前、x + 15、y + 15);これを試して、それは許容可能な移動ですか?しかし、今では色を混乱させようとしている私の名前は正しく表示されていますが、今までの結果はありません –

+0

それはかなり受け入れられますが、どちらの答えもx/y座標に 'magic number' –