У меня есть проблема в JTable, когда я выбираю выбранное значение из выпадающего списка, это не изменит цвет конкретной ячейки?Моя задача состоит в том, чтобы изменить только те цвета ячеек, которые выбраны из выпадающего списка.Я имею в виду, что когда я выбираю значение1 из выпадающего списка ... должна выделяться та же самая ячейка значения1, а другое значение ячейки должно оставаться как есть ..?
private void searchPatient(){
String value = cmbSearchBy.getSelectedItem().toString();
String id = txtSearch.getText();
DefaultTableModel model = new DefaultTableModel();
jTable1.setModel(model);
jTable1.setDefaultRenderer(Object.class, new CellHighlightRenderer());
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
final TableColumnModel colModel = jTable1.getColumnModel();
for(int column=0; column<jTable1.getColumnCount();column++){
int width = 15;
for(int row=0; row<jTable1.getRowCount();row++){
TableCellRenderer render = jTable1.getCellRenderer(row, column);
Component component = jTable1.prepareRenderer(render, row, column);
width = Math.max(component.getPreferredSize().width+1, width);
}
if(width>300){
width = 300;
colModel.getColumn(column).setPreferredWidth(width);
}
}
try {
String searchQuery = "select pcno, name, NRIC, emailid, contactno from n_patient where "+value+"=?" ;
pst = con.prepareStatement(searchQuery);
pst.setString(1, id);
rs = pst.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
Vector<String> colNames = new Vector<String>();
int colCount = metaData.getColumnCount();
for(int i=1; i<=colCount; i++){
colNames.add(metaData.getColumnName(i));
}
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int i = 1; i <= colCount; i++) {
vector.add(rs.getObject(i));
}
data.add(vector);
}
model.setDataVector(data, colNames);
} catch (Exception e) {
e.printStackTrace();
}
}
И класс TableCellRendere здесь
public class CellHighlightRenderer implements TableCellRenderer{
private static final TableCellRenderer RENDERER = new DefaultTableCellRenderer();
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component component = RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if(column==0){
Object result = table.getModel().getValueAt(row, column);
int cellValue = Integer.parseInt(result.toString());
Color color = Color.GREEN;
component.setBackground(color);
}
else if(column==1){
Object result = table.getModel().getValueAt(row, column);
String cellValue = result.toString();
Color color = null;
component.setBackground(color);
}else if(column==2){
Object result = table.getModel().getValueAt(row, column);
String cellValue = result.toString();
Color color = Color.GREEN;
component.setBackground(color);
}else if(column==3){
Object result = table.getModel().getValueAt(row, column);
String cellValue = result.toString();
Color color = Color.GREEN;
component.setBackground(color);
}else if(column==4){
Object result = table.getModel().getValueAt(row, column);
int cellValue = Integer.parseInt(result.toString());
Color color = Color.GREEN;
component.setBackground(color);
}
else{
component.setBackground(Color.BLACK);
}
return component;
}
}
Вот выходное изображение
Элементы раскрывающегося списка