我想將一些任意文本轉換爲Shape(java.awt.Shape
),然後敲擊/填充Shape以繪製它。我怎樣才能做到這一點?java/swing:將文本字符串轉換爲形狀
回答
嗯,我不知道這個問題的答案,但經過一些調整後,並與Eclipse內容閒逛幫助我發現這似乎是你所需要的:
編輯:我改變代碼來改變字符串的顯示方式,這是你問你問什麼的原因:)試試看。它呈現爲紅色和虛線輪廓
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.font.GlyphVector;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test extends JPanel{
private Shape s;
public Test() {
Font f = getFont().deriveFont(Font.BOLD, 70);
GlyphVector v = f.createGlyphVector(getFontMetrics(f).getFontRenderContext(), "Hello");
s = v.getOutline();
setPreferredSize(new Dimension(300,300));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.translate(100, 150);
g2.rotate(0.4);
g2.setPaint(Color.red);
g2.fill(s);
g2.setPaint(Color.black);
g2.setStroke(new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1, new float[]{1,0.4f,1.5f}, 0));
g2.draw(s);
}
public static void main(String[] args) {
JFrame f = new JFrame("Test");
Component c = new Test();
f.getContentPane().add(c);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
}
另外請注意,您可以通過調用得到的字符串中的單個字符的字符串:
太好了 - 我接受這個,因爲它是一個完整的和可以理解的例子。我很困惑,因爲看起來有兩種方法可以做到這一點。您使用的GlyphVector方法以及@objects回答的TextLayout方法。除了字體和文本字符串,GlyphVector()似乎只需要一個FontRenderContext,但TextLayout需要一個FontRenderContext和一個AffineTransform,所以不知道每個方法的優點和缺點。 – 2010-03-18 14:02:04
確實......聽到Sun員工(或者有關此事的有經驗的人)的差異會很有趣。看來,TextLayout用於許多文字字形相關的操作,如插入符號形狀,切換字符......我最初認爲,其中一個必須是API的新增加,但從我可以看到兩個類存在於1.4 API(對於我和許多這是第一個足以稱爲Java:P的版本)。 – 2010-03-18 14:10:27
如果我理解正確的話,這是不是爲了解決您確切的答案,但它是一個開始......
//Rough pseudo code
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.TexturePaint;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = (Graphics2D)image.getGraphics();
//Paint with texturing brush
Rectangle2D rect2D = new Rectangle2D.Double(0, 0, width, height);
graphics.setPaint(new TexturePaint(image, rect2D));
graphics.fill(rect2D);
//Draw text
graphics.drawString("my text goes here", xPos, yPos);
總結,
- 創建
BufferedImage
對象width
和height
和ImageType
。 - 獲取圖片的
Graphics
對象。 - 油漆圖形像請你(即創建一個矩形,圓形,文本等)
- 編寫圖像流(文件的ServletRequest等)
謝謝,但我想留在矢量圖形 – 2010-03-18 13:52:35
我建議你對你的問題變得更加謹慎,然後@Jason S.我們正在努力提供幫助,但是我們無法理解你的想法。 – 2010-03-18 23:09:34
??我很感激這個幫助,但是我的問題特別提出瞭如何將文本轉換爲Shape,如'java.awt.Shape'中所示。 – 2010-03-19 13:54:29
使用TextLayout類(請參閱getOutline()方法)。 Theres an example here
+1:看到我對@Sawas – 2010-03-18 14:02:25
答案的評論,我們的答案顯然是正確的...... :) – 2010-03-18 14:08:09
這個例子稍微緊湊一些,比接受的答案要乾淨得多。 http://www.java2s。COM /代碼/ Java的/ 2D圖形的GUI/OutlineFontpaint.htm – planty182 2015-08-27 13:34:38
- 1. SQL - 將字符串轉換爲文本
- 2. 將二進制字符串轉換爲文本字符串
- 3. 將字符串(字母)從文本文本轉換爲整數
- 4. 將字符串轉換爲字符串
- 5. JQuery.each將字符串文字轉換爲字符串。爲什麼?
- 6. 將劇本轉換爲字符串
- 7. 將* .py腳本轉換爲字符串
- 8. 將RTF字符串中的unicode字符轉換爲純文本
- 9. 將字符串轉換爲
- 10. 將字符串轉換爲「_」
- 11. 將字符串轉換爲?
- 12. 將XML文檔轉換爲字符串?
- 13. 將字符串轉換爲xml文件?
- 14. Ruby將字符串轉換爲文件
- 15. 將字符串轉換爲XML文件
- 16. 如何將字符串文字轉換爲字符串值
- 17. 將字符串轉換爲字符
- 18. 將字符串轉換爲字符
- 19. 將字符串轉換爲字符
- 20. 將char字符串轉換爲字符
- 21. Java - 將字符串轉換爲字符[]
- 22. InfixToPostfix將字符轉換爲字符串
- 23. 將PI數字轉換爲文本字符串
- 24. jQuery - 如何將字符串從文本框轉換爲字節?
- 25. 圓形轉換爲熊貓字符串
- 26. 如何從文本文件中將字符串轉換爲unicode?
- 27. 使用sed將文本文件轉換爲C字符串
- 28. 將dictonary值轉換爲字符串以放入文本文件?
- 29. 將整數轉換爲文本文件的字符串
- 30. 將字符串文本文件轉換爲對象數組
不確定這裏是什麼意思。你能詳細說明嗎?你想讓文字成爲文字中的人物形狀嗎? – Holograham 2010-03-17 22:08:27