java/Swing : converting a text string to a Shape

标签 java swing graphics text

我想将一些任意文本转换为形状 ( java.awt.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)

关于java/Swing : converting a text string to a Shape,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2466233/

相关文章:

Java : Why doesn't this scrollpane scroll?

delphi - 在 Delphi 中进行非闪烁、分段图形更新的最佳方法?

java - 如何使带有 IO 任务循环的 java 程序更快?

java - 点击多个播放声音的按钮时出现错误 (1, 19)

java - 如何从 no-gui 类实时更新 Java Jframe 控件

java - 如何在已动态添加的JLabel 的JPanel 中获取Location()?

java - 创建一个函数来查找任意线段和正方形的交集

c++ - 如何在 OpenCV 中使用 16 位灰度?

java - 如何在ArrayList中保存类似csv的文本文件以按名称排序

java - 变量 objectPO 可能尚未初始化