Я новичок в весне, пробуя разные варианты выбора строк и ячеек JTable. Застрял в этой проблеме.
У меня есть простая JTable с несколькими записями, я добавил функциональность CellHighlight (полученную из stackoverflow), она работает нормально. Но после добавления этого выделения выделения строк не происходит.
Пожалуйста, предложите, чего мне не хватает.
например:
import com.log.spark.QueryParams;
import org.apache.commons.lang3.StringUtils;
import javax.swing.*;
import javax.swing.table.TableCellRenderer;
import javax.swing.text.DefaultHighlighter;
import java.awt.*;
public class TableExample {
JFrame f;
TableExample() {
f = new JFrame();
String data[][] = {{"101", "Amit", "670000"},
{"102", "Jai", "780000"},
{"101", "Sachin", "700000"}};
String column[] = {"ID", "NAME", "SALARY"};
JTable jt = new JTable(data, column);
jt.setBounds(30, 40, 200, 300);
JScrollPane sp = new JScrollPane(jt);
jt.setDefaultRenderer(Object.class, new CellHighlightRenderer());
f.add(sp);
f.setSize(300, 400);
f.setVisible(true);
}
public static void main(String[] args) {
new TableExample();
}
}
class CellHighlightRenderer extends JTextField implements TableCellRenderer {
public DefaultHighlighter high = new DefaultHighlighter();
private QueryParams params = QueryParams.getInstance();
public DefaultHighlighter.DefaultHighlightPainter highlight_painter
= new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
public CellHighlightRenderer() {
setBorder(BorderFactory.createEmptyBorder());
setHighlighter(high);
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected,
boolean hasFocus, int row,
int column) {
setFont(table.getFont());
setValue(value);
int pos = 0;
String pattern = params.getHighlightTxt();
//if (len > last) {
if (StringUtils.isNotBlank(pattern) && !pattern.equals("search message")) {
while ((pos = value.toString().indexOf(pattern, pos)) >= 0) {
try {
//high.addHighlight(first, last, highlight_painter);
high.addHighlight(pos, pos + pattern.length(), highlight_painter);
pos += pattern.length();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return this;
}
protected void setValue(Object value) {
setText((value == null) ? "" : value.toString());
}
}