【问题标题】:How to search through the text in a JLabel?如何在 JLabel 中搜索文本?
【发布时间】:2015-05-09 02:30:45
【问题描述】:

我有一些代码可以访问网站,查找文本,然后以 JLabel 的 html 样式将其打印出来。我希望能够更改文本中特定单词的颜色(也许所有单词“cow”都是绿色的)。代码如下:

public void code() throws IOException
{
    Document document = Jsoup.connect("http://www.nbcwashington.com/weather/school-closings/").get();
    Elements tags = document.select("p");

    String txt = "<html>";
    for (Element tag : tags) {
      txt += tag.text() + "<br/>";
    }
    txt += "</html>";
    output.setText(txt);

    }

【问题讨论】:

  • txt += tag.text() + "&lt;br/&gt;"; 应该类似于 txt += tag.text().replaceAll("cow", "&lt;span style='color: #00FF00;'&gt;cow&lt;/span&gt;") + "&lt;br/&gt;";。如需更详细的帮助,请发布MCVE。顺便说一句 - 使用 StringBuilder 比使用字符串连接更好(更有效)。
  • 两种方式都试过了。对于安德鲁,你将如何添加多个东西?有时事情会说封闭或用小写和类似的东西封闭
  • “你将如何添加多个东西?” 再次,这次声音更大。如需更详细的帮助,请发布 MCVE。

标签: java html swing jsoup


【解决方案1】:

我有一段代码可以访问网站,查找文本,然后以 JLabel 的 html 样式将其打印出来

我发现使用 JTextPane 和样式属性比使用 HTML 更容易。

只需将文本作为普通文本添加到文本窗格中,然后您就可以搜索文本并根据需要更改属性:

未经测试的代码类似于:

JTextPane textPane = new JTextPane();
textPane.setText(...);

SimpleAttributSet keyword = new SimpleAttributeSet();
StyleConstants.setForeground(keyword, Color.GREEN);

StyledDocument doc = textPane.getStyledDocument();
int length = textPane.getDocument().getLength();
text = textPane.getDocument().getText(0, length);
String search = "cow";
int offset = 0;

while ((offset = text.indexOf(search, offset)) != -1)
{
    doc.setCharacterAttributes(offset, search.length(), keyword, false);
    offset += search.length();
}

您还可以使用以下方法使 JTextPane 看起来像 JLabel:

textPane.setOpaque( false );

【讨论】:

    【解决方案2】:

    您可以使用.equals方法检查值。您可以使用span标签对其进行着色。

    public void code() throws IOException
    {
        Document document = Jsoup.connect("http://www.nbcwashington.com/weather/school-closings/").get();
        Elements tags = document.select("p");
    
        String txt = "<html>";
        for (Element tag : tags) {
           if(tag.text().equals("cow")){
            txt += "<span style=\"color:#00FF00\">"+tag.text()+"</span><br/>";
           }else{
            txt += tag.text() + "<br/>";
           }
        }
        txt += "</html>";
        output.setText(txt);
    
        }
    

    【讨论】:

    • tnx 第三个是个错误
    • 第二个是减一,如果只是为了懒惰的话。请省去我的麻烦(并改变它)。
    • 我没有得到第二个。你的意思是使用全部替换而不是 .equals 吗?
    • 不,我说的是两个 non-code 句子。如果你不明白我写的东西,请询问它,而不是无视我。
    • @AndrewThompson 最终我明白了。
    猜你喜欢
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2016-11-23
    • 1970-01-01
    相关资源
    最近更新 更多