我想将一些任意文本转换为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