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

如何用图像替换文本中的单词?

薛焱
2023-03-14
"the little cat is good"
"there is no tomorrow" 
"cat is what I need"

我想要的输出将是一个包含以下项的JScrollPane:

"the little *cat icon* is good"
"there is no tomorrow" 
"*cat icon* is what I need"

我发现了创建自定义ListCellRenderer来替换DefaultListModel的建议。在所有的例子中,一个imageIcon是作为图标添加到lable中的,不幸的是,这只在文本的开头添加了一个图标,这不是我想要的。

以下是本网站示例之一的相关部分:

@Override
public Component getListCellRendererComponent(
    JList list, Object value, int index, 
    boolean isSelected, boolean cellHasFocus) {

    // Get the renderer component from parent class

    JLabel label = 
        (JLabel) super.getListCellRendererComponent(list, 
            value, index, isSelected, cellHasFocus);

    // Get icon to use for the list item value

    Icon icon = icons.get(value);

    // Set icon to display for value

    label.setIcon(icon);
    return label;
}

共有1个答案

益绯辞
2023-03-14

您可以使用JLabel的html特性,将cat切换到

public class JListTest extends JPanel{  
  private static final long serialVersionUID = 1L;

  public JListTest(){
    this.setLayout(new BorderLayout());
    JScrollPane scrollPane = new JScrollPane();
    String[] data = {"the little cat is good", "there is no tomorrow" , "cat is what I need"};
    switchToHtml(data);
    replaceWithImage(data,"cat","cat.png");
    JList<String> list = new JList<String>(data);
    scrollPane.getViewport().add(list);
    this.add(scrollPane,BorderLayout.CENTER);       
  }

  private void replaceWithImage(String[] data, String replace, String image) {
    for (int i = 0; i < data.length; i++) {
        String text = data[i];
        if (text.contains(replace)){
            text = text.replaceAll(replace, "<img src=\"" + JListTest.class.getResource(image) + "\">");
            data[i]=text;
        }           
    }
  }

 private void switchToHtml(String[] data) {
    for (int i = 0; i < data.length; i++) {
        data[i]="<html><body>" + data[i] + "</body></html>";
    }
 }

 public static void main(String[] args) {
    JFrame frame = new JFrame("Test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(new BorderLayout());
    frame.getContentPane().add(new JListTest(),BorderLayout.CENTER);
    frame.pack();
    frame.setVisible(true);
 }
}

要进行测试,只需在与相同的包中添加一个cat.png

 类似资料:
  • 问题内容: 我想代替标准单选按钮,对每个单选按钮使用不同的图像。对于选定状态,我希望在图像周围出现边框。 我尝试为单选按钮制作图像标签,然后隐藏该按钮,但是由于某种原因,这似乎破坏了功能。 有没有更简单/更好的方法? 问题答案: jQuery 演示源中的完整代码;

  • 我有一条短信。在这篇文章中是一张图片。我想把每个单词柏林都换成一个链接。现在我有问题,这站在图片的旧部分也是柏林,这也被取代。 有没有可能照片中的柏林没有被取代?注意,代码只是一个示例。我通常从wordpress获取内容。但这与此无关。我想。

  • 问题内容: 我目前正在开发一个简单的聊天应用程序。我想在此应用程序中添加表情符号功能。我已经有一个从其他用户接收字符串的功能。我想要的是- 如果用户发送的文本包含CharSequence之类的字符,例如“:D”或“:p”,我希望将它们更改为表情符号。如何实现此功能? 我想要这样的功能: 如果可以的话,请帮助我。如果还有其他方法,请提及它们。 问题答案: 你可以这样尝试

  • 问题内容: 我想替换图像的颜色。例如,将所有蓝色变为红色而形状没有任何变形。当我尝试这样做时,我可以通过迭代每个像素来交换颜色,但是交换区域的形状变为平坦的形状。 example1输入:http: //www.tutorialwiz.com/tutorials/changing_color/images/original.jpg example1输出:http : //www.tutorialwi

  • 问题内容: 好的,所以我有这个yaml文件,我想替换一个字符串 与字符串 但是我不知道该怎么办。这是完整的Yaml文件 问题答案: 假设您使用的操作系统不错,并且您的YAML文档称为:

  • 问题内容: 我需要从OracleSQL中的employees表中显示Employee及其佣金金额,但是条件是如果它遇到值,我需要打印_“ No Commission”_ 。 在第一部分中,我写道: 但是我无法获得如何用 “ No Commission” 代替价值观。 问题答案: 您可以使用表达式: 或: 或: PS如果不是数据类型,则也应使用或。