当前位置: 首页 > 知识库问答 >
问题:

是否可以部分突出一个字符?

有骏奇
2023-03-14

Swing中可以实现这样的功能吗

注意这里A是部分着色的。

我知道光凭DefaultHighlighter类是不可能的。(文本显示在JTextArea

要实现这一点,有什么解决方案可以单独使用Swing或必须使用CSS?

编辑:

如果这是不可能的摆动,任何解决方案与以下标签?

共有1个答案

龚同
2023-03-14

类似的情况在Java 2D中是可能的,但在JTextArea中是不可能的。因此,您可以创建代码,在一个框架中呈现这一点,但我认为您不会找到一种简单的方法来为文本编辑器添加对这一点的支持(嗯,您可以始终在文本编辑器中嵌入图像,但这可能不是您想要的)。

[编辑]对于卡拉ok播放器的文本显示,Java2D是最好的选择。Java编辑器API只会妨碍你。

下面是一个使用渐变渲染文本的示例:

  public void sayWorld(Graphics2D g2D, int x, int y, boolean shear) {
      final String txt = "Hello World!";

      // gradient color from blue to red
      GradientPaint gp = new GradientPaint((float)x, (float)y, Color.blue,
                             x+100, y+20, Color.red);
      g2D.setPaint(gp); 
      if (shear) g2D.shear(-0.5,0.0);
      else       g2D.shear(+0.5, 0);
      g2D.drawString(txt, x, y);

      FontRenderContext frc = new FontRenderContext(null,false,false);

      TextLayout tl = new TextLayout(txt, font, frc);
      AffineTransform textAt = new AffineTransform();
      //textAt.translate(0, (float)tl.getBounds().getHeight());
      textAt.translate(x,y); 
      //textAt.shear(-0.5,0.0);

      Shape outline = tl.getOutline(textAt); 
      g2D.setColor(Color.yellow);
      BasicStroke wideStroke = new BasicStroke(2);
      g2D.setStroke(wideStroke); 
      g2D.draw(outline);
  }

(来源)

基本上,你从一行歌词中获得文本布局,然后将其转换成一个形状(=每个字母的轮廓)。然后,可以使用此形状作为剪辑区域来渲染渐变。

在你的例子中,你需要一个突然的渐变,它的宽度是你想要渲染的最长文本线的两倍。适当地移动它,以在需要的文本位置获得渐变变化。

 类似资料:
  • 例如,我知道在检查字符串时,可以执行如下操作 但是是否有一种方法来检查一个字符是否匹配一个可能性列表?或者我必须逐一检查,例如 ...等。

  • 鉴于这些实体和存储库可以访问DDBB中的数据: 我想为方法getTotalPurchaseAmounts(长customerId)添加缓存,这样,当为客户添加一些购买时,只有该客户的purchasesd被逐出。 相关的依赖项是: 相关配置: 由于spring缓存(和ehcache)逐出的次数受元素或所有条目的限制,我开发的解决方案是通过友好方式创建缓存(每个客户一个),这样我就可以逐出这些缓存。

  • 我有一个JavaFX TableView,它有两列。此表使用观察列表作为其模型。 我想将其中一个设置为可编辑,另一个设置为不可编辑。 首先,我尝试了FXML方法: 但这不管用。表格始终不可编辑。 我还尝试了java方式: 但这也不管用。所有的桌子都不能修改。 如果TableColumn有一个可编辑的属性,那么它应该可以单独设置。 如果你知道我哪里做错了,请帮帮我。谢谢。 PS:measureNum

  • 问题内容: 我正在使用React.js作为前端框架来构建一个项目。在一个特定页面上,我正在向用户显示完整的数据集。我有一个包含完整数据集的数组。它是JSON对象的数组。在向用户呈现此数据方面,我目前通过使用Array.map()返回每一项数据来显示整个数据集。 这是朝着正确方向迈出的一步,但是现在我只需要显示数据集的一部分,而不是全部,我还需要一些控件来了解已显示的总数据集的数量,并且有多少数据集

  • 我正在写一个jar,打算与Spring和Ehcache一起使用。Spring要求为每个元素定义一个缓存,所以我计划为jar定义一个Ehcache,最好是作为jar中的一个资源,可以导入应用程序的主要Ehcache配置。然而,我对示例Ehcache配置文件的阅读和我的谷歌搜索并没有找到任何导入子Ehcache配置文件的方法。 有没有办法导入一个子Ehache配置文件,或者有没有其他方法来解决这个问题

  • 是否可以初始化一个Spring? 例如。 (我正在尝试最后两个场景)