Привет, этот вопрос довольно специфичен. Для занятий нам нужно было сделать какую-то библиотечную программу.
Я сделал свой список, отображаемый в 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;
}
}
Заранее спасибо за любой совет или хитрость.