繁体   English   中英

Java Swing:Jtable突出显示单元格中单词的仅一部分

[英]Java Swing : Jtable Highlight ONLY part of a word in a cell

您好,这个问题很具体。 对于课堂,我们必须制作某种图书馆程序。

我将列表显示在JTable中,并实现了一个搜索窗口,该窗口也使用了JTable ...我将自定义CellRenderer突出显示在书的代码或书名中包含术语搜索时。

我的问题是现在将整个单词加粗。...是否可以使该单词仅加粗一部分?

现在该类还具有一个函数,该函数为我提供了单元格值中搜索词的开始和结束的索引。 (在类末尾的getSearchIndex(Object,String)下找到它)

这是一个屏幕,位于渲染器代码的下方(用于颜色的代码是单独的)。

对不起,这是法文

import java.awt.Component;
import java.awt.Font;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

 class HighlightRenderer extends DefaultTableCellRenderer {

private static final long serialVersionUID = 1L;
String searched = "";

public HighlightRenderer(String search){
    super();

    if(search != null && search != "")
        searched = search;
    else searched = "";
}

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
    Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        if(searched.length() == 0){
            cellComponent.setFont(new Font(this.getFont().getName(), Font.PLAIN, this.getFont().getSize()));
        }

        else if(value.toString().toUpperCase().contains(searched.toUpperCase())){
            cellComponent.setFont(new Font(this.getFont().getFontName(), Font.BOLD, this.getFont().getSize()));
            int[] index = getSearchIndex(value, searched);
        }

    return cellComponent;
}

private int[] getSearchIndex(Object value, String search){

    int searchLength = search.length();
    String key = (String) value;

    int[] retour = new int[2];
    retour[0] = -1;
    retour[1] = -1;

    for(int i = 0; i < key.length(); i++){
        if(key.substring(i, i+searchLength).equalsIgnoreCase(search)){
            retour[0] = i;
            retour[1] = i + searchLength;
            return retour;
        }
    }
    return retour;

}

}

在此先感谢您的提示或技巧。

文本组件可以具有StyledDocument,并且可以通过指定颜色属性来标记部分文本。

便宜一点是使用HTML。 默认情况下,单元格渲染器提供的任何文本组件(例如JLabel)。 HTML可能非常不完整。

JLabel label = (JLabel) cellComponent; // Or new JLabel();
label.setText(
    "<html>An <span style='background-color: lightskyblue'>example</span> of HTML");

String highlight(String text, String sought) {
     text = StringEscapeUtils.escapeHTML4(text); // <, >
     sought = StringEscapeUtils.escapeHTML4(sought);
     return "<html>" + text.replace(sought, "<b>" + sought + "</b>");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM