0
こんにちは、この質問はかなり具体的です。授業では何らかの図書館プログラムを作らなければなりませんでした。Java Swing:Jtableセル内の単語の一部のみを強調表示
JTableに表示されたリストを作成し、JTableを使用する検索ウィンドウを実装しました。カスタム検索のCellRendererを、ブックまたはタイトルのコードに用語検索が含まれているときにハイライト表示しました。
私の質問は今、それは全世界を大胆にしています....それはその言葉の大胆な部分だけにすることは可能ですか?
今、このクラスには、セルの値に検索用語の開始と終了のインデックスを与える関数もあります。
レンダラーのコードとスクリーンの下に表示されます(色は別です)。任意のヒントやトリックを事前に
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;
}
}
感謝。
あなただけの ''直接DefaultTableCellRenderer'に、それはそう、DefaultTableCellRendererは、独自のコンポーネントである@MadProgrammer – MadProgrammer
最初にキャストする必要がなく、同じことになると思いsetText'使用することができます。その点で、 'this.setFont'や' component.setFont'のようなOPのコードのいくつかは、意外にも同じであるかもしれません。 –
しかし 'Component cellComponent = super.getTableCellRendererComponent'はそれ自身のインスタンスを返していますので、' cellComponent == this'は 'true'です:P、どちらの場合でもうまくいくでしょう、私はちょっと怠けた;) – MadProgrammer