gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:22:52 29 4
gpt4 key购买 nike

嗨,这个问题相当具体。为了上课,我们必须制作某种图书馆程序。

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

我的问题是现在它把整个单词加粗......是否有可能只将该单词的一部分加粗?

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

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

Sorry this is in French

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>");
}

关于Java Swing : Jtable Highlight ONLY part of a word in a cell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43507889/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com