I search in the table, when i find a match i want to change a bg color of that cell. I did as below but still can't fix it? Can any body help to fix this problem?
public class SearchTable extends JTable {
JTable table;
JTextField textField;
public SearchTable(JTable table, JTextField textField) {
this.table = table;
this.textField = textField;
textField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
search();
}
});
textField.getDocument().addDocumentListener(new DocumentListener() {
public void insertUpdate(DocumentEvent e) {
search();
}
public void removeUpdate(DocumentEvent e) {
search();
}
public void changedUpdate(DocumentEvent e) {
search();
}
});
}
private void search() {
String target = textField.getText();
for (int row = 0; row < table.getRowCount(); row++)
for (int col = 0; col < table.getColumnCount(); col++) {
String next = (String) table.getValueAt(row, col);
if (next.equals(target)) {
changeBackgroundColor(row, col);
return;
}
}
table.repaint();
}
private void changeBackgroundColor(int row, int col) {
table.setColumnSelectionAllowed(true);
table.setRowSelectionAllowed(true);
boolean toggle = false;
boolean extend = false;
table.changeSelection(row, col, toggle, extend);
//first atempt sets bg color for all cells, it is not OK
//table.setSelectionBackground(Color.green);
//second atempt getting no result
table.getCellEditor(row,col).getTableCellEditorComponent(table,table.getValueAt(row,col),true,row,col).setForeground(Color.red);
//3th atempt getting no result
//Component c = table.getCellRenderer(row, col).getTableCellRendererComponent(table, table.getValueAt(row, col), true, true, row, col);
//c.setForeground(Color.red);
//4th atempt getting no result
//DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) table.getCellRenderer(row, col).getTableCellRendererComponent(table, table.getValueAt(row, col), true, true, row, col).;
//renderer.setBorder(new LineBorder(Color.red));
}
}
You can use XxxCellRenderer
, better and easiest is to use prepareRenderer()
for correct code you have to override or test inside if-else follows patameters
isSelected
hasFocus
column
row
Please to check answers and one question about similair issue, there are two simple ways, sorry I'm in FRI trafic, brrrrr
You need to set the cell renderer to the column first -
col.setCellRenderer( new TableCellRenderer() {
public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column )
{
Component cell = centerRenderer.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column );
cell.setForeground(Color.green);
}
});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.