2012-04-10 27 views
1

文字列の外にある矩形の枠線を持つグラフィックスを使用して文字列を描画したいと思います。矩形の枠線を持つdrawString

これは、私はすでに何をすべきかです:

 public void paint(Graphics g) { 
     Graphics2D g2d = (Graphics2D) g; 
     FontMetrics fontMetrics = g2d.getFontMetrics(); 
     String str = "aString Test"; 

     int width = fontMetrics.stringWidth(str); 
     int height = fontMetrics.getHeight(); 

     int x = 100; 
     int y = 100; 

     // Draw String 
     g2d.drawString(str, x, y); 
     // Draw Rectangle Border based on the string length & width 
     g2d.drawRect(x - 2, y - height + 2, width + 4, height); 
    } 

私の問題は、私は外に長方形の枠線で改行(「\ n」)をして、文字列を描きたい、次のとおりです。

これは、新しい行のコード:

 public void paint(Graphics g) { 
     Graphics2D g2d = (Graphics2D) g; 
     FontMetrics fontMetrics = g2d.getFontMetrics(); 
     String str = "aString\nTest"; 

     int width = fontMetrics.stringWidth(str); 
     int height = fontMetrics.getHeight(); 

     int x = 100; 
     int y = 100; 

     // Drawing string per line 
     for (String line : str.split("\n")) { 
      g2d.drawString(line, x, y += g.getFontMetrics().getHeight()); 
     } 
    } 

誰でもこの問題を解決できますか?私が正しく理解していれば、私はあなたの問題は、長方形の高さであり、あなたの助け&提案...

最終的なコード

 int numberOfLines = 0; 

     for (String line : str.split("\n")) { 
      if(numberOfLines == 0) 
       g2d.drawString(line, x, y); 
      else 
       g2d.drawString(line, x, y += g.getFontMetrics().getHeight()); 
      numberOfLines++; 
     } 

     g2d.drawRect(x - 2, y - height * numberOfLines + 2, width + 4, height * numberOfLines); 

答えて

3

を感謝しています。

は、あなたが例えばしているどのように多くの行の記録を維持してみてください。

int numberOfLines=0; 

for (String line : str.split("\n")) { 
    g2d.drawString(line, x , y + (numberOfLines * height)); 
    numberOfLines++; 
} 

g2d.drawRect(x - 2, y - height + 2, width + 4, height * numberOfLines); 

これはまた、文字列を描画するためのyの値をどのように動作するか変更します。

そのようなものはありますか?

+0

私は高さのいくつかの変更を加えました: g2d.drawRect(x - 2、y - 高さ* numberOfLines + 2、幅+4、高さ* numberOfLines); – Crazenezz

+0

甘い、うれしかった –

1

また、通常のJLabelオブジェクトを作成し、そのテキストをhtmlで設定し、
タグを含めることもできます。例えばmyLabel.setText("<html>aString<br>Test</html>");を入力し、JLabelに1行の境界線を追加します。

関連する問題