2011-11-26 34 views
3

我只想在充满黑色的矩形内显示我的字符串。谢谢您的帮助!如何在填充矩形内绘制字符串?

+2

你尝试过这么远吗? 'drawString()'可以做到,但一定要在绘制矩形后调用它,否则会覆盖字符串。 – zeller

+0

我已经尝试了g.fill之前的drawString,但它不是我正在寻找的。如果在g.fill之后,我尝试过,它仍然不是D: – alicedimarco

+0

也许在drawString之前改变颜色? – zeller

回答

8

给你:

public class MyPanel extends JPanel{ 
    public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawRect(10/*x*/, 10/*y*/, 80/*width*/, 30/*hight*/); 
    g.drawString("TextToDraw", 25/*x*/, 25/*y*/); 
    } 
} 
+0

如果我有g.drawRect(x-50,y-50,60,25),你认为我的坐标应该用于drawString吗? – alicedimarco

+0

Nvm! :D我知道了。非常感谢!我想通了:)哈哈我只是很难与我的drawString的坐标,所以它没有中心。 – alicedimarco

+1

我很高兴它的工作:) – GETah

2
public class LabeledRectangle extends Rectangle{ 

    public LabeledRectangle(int x, int y, int width, int height, String text) { 
     super (x, y, width, height); 
     this.text = text; 

    } 

    public void draw(Graphics g) { 
     Graphics2D g2 = (Graphics2D) g; 
     g2.draw(new Rectangle2D.Double(x, y, width,height)); 
     Font font = g2.getFont(); 
     FontRenderContext context = g2.getFontRenderContext(); 
     g2.setFont(font); 
     int textWidth = (int) font.getStringBounds(text, context).getWidth(); 
     LineMetrics ln = font.getLineMetrics(text, context); 
     int textHeight = (int) (ln.getAscent() + ln.getDescent()); 
     int x1 = x + (width - textWidth)/2; 
     int y1 = (int)(y + (height + textHeight)/2 - ln.getDescent()); 

     g2.setColor(Color.red); 

     g2.drawString(text, (int) x1, (int) y1); 
    } 
    private String text; 
} 
+0

你'字体的字体= g2.getFont();'然后两行之后的'g2.setFont(字体);'不与变量'font'做任何事情。是不是'setFont'多余? – 11684