java / swing:将文本字符串转换为Shape

我想将一些任意文本转换为Shape( java.awt.Shape ),然后描绘/填充Shape以绘制它。 我怎样才能做到这一点?

嗯,我不知道答案,但经过一些调整,并在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); } } 

另请注意,您可以通过调用以获取字符串中的单个字符:

 getGlyphOutline(glyphIndex) 

使用TextLayout类(请参阅getOutline()方法)。 这是一个例子

如果我理解正确,这不是为了解决你的确切答案,但这是一个开始……

 //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); 

综上所述,

  1. 创建widthheightBufferedImage对象和ImageType
  2. 获取图像的Graphics对象。
  3. 画出你喜欢的图形(即创建一个矩形,圆形,文本等)
  4. 将该图像写入流(文件,ServletRequest等)