0
嗨,這個問題更具體。對於課程,我們必須製作某種圖書館程序。Java Swing:Jtable突出顯示單元格中單詞的一部分
我讓我的列表顯示在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;
}
}
預先感謝任何尖端或技巧。
你可以只用'setText'直接在'DefaultTableCellRenderer',這將會是無需投第一 – MadProgrammer
@MadProgrammer是,DefaultTableCellRenderer是它自己的組件同樣的事情。在這方面,像'this.setFont'和'component.setFont'這樣的一些OP的代碼可能會有點令人驚訝的是相同的。 –
但是'Component cellComponent = super.getTableCellRendererComponent'正在返回它自己的一個實例,所以'cellComponent == this'是'true':P,所以無論哪種情況它都可以工作,我只是懶惰;} – MadProgrammer