Как динамически изменить цвет конкретной ячейки в jtable (в зависимости от ввода) - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть проблема в 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;
    }
}

Вот выходное изображение

Элементы раскрывающегося списка

...