当前位置: 首页 > 面试题库 >

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

沈弘盛
2023-03-14
问题内容

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


 类似资料:
  • 问题内容: 我需要将由某些特定于某些语言的字母(例如HÄSTDJUR-注意Ä)组成的s 转换为不带那些特殊字母(在这种情况下为HASTDJUR)的。如何用Java做到这一点?感谢帮助! 它不是真的如何听起来。该场景如下-您要使用该应用程序,但没有瑞典语键盘。因此,您无需查看字符映射表,而是通过将特殊字母替换为拉丁字母中的典型字母来键入它。 问题答案: 我认为您的问题与此问题相同: Java-消除重

  • 问题内容: 得到了以下格式的字符串:YYYY-MM-DD- HH.MM.SS.NNNNNN时间戳记来自DB2数据库。我需要将其解析为java.sql.Timestamp,并且不要丢失任何精度。到目前为止,我一直找不到现有的代码来解析这么多毫秒。SimpleDateFormat返回一个Date,并且仅解析为毫秒。简短地看了一下JodaTime,也没有发现任何效果。 问题答案: 您是否尝试过使用?看起

  • 问题内容: 将带逗号的字符串数字(例如:835,111.2)转换为Double实例的最简单,正确的方法是什么。 谢谢。 问题答案: 看一看。例如: 根据您使用的数量类型,您可能想解析为一个。最简单的方法可能是: 或与一起使用:

  • 问题内容: 我不确定是我还是什么,但是将双精度转换为字符串时遇到问题。 这是我的代码: 我是在做错事还是在这里错过了一步。 尝试将其转换时出现错误。 我正在尝试在onTouchListener中执行此操作。病态发布更多代码,基本上是当用户触摸编辑文本框时,我希望信息计算填充编辑文本框。 问题答案: 这会将double转换为String

  • 问题内容: 我想将String转换为KeyEvent以执行以下操作: 问题答案: 我基本上是在用荣耀的声明。简单快捷: 如果要进行一些自定义键键入,则可以扩展该类并重写该type(char)方法。例如: 当然,还有改进的余地,但是你知道了。

  • 问题内容: 我有一个,我需要一个。如何从一个转换为另一个? 问题答案: 好问题。我有以下五种 6种方法可以做到这一点。 注意:返回。因此有效地两者是相同的。 调用,这又设置了数组。 另一方面,调用以下程序包私有构造函数。 从源代码中的Java 8的源代码 因此似乎是最有效的方法,在这两个存储器和速度方面,用于转换char到String。