Skip to content
Advertisement

Is there a way that i can highlight or colour various table rows based on data entered in textfield?

What i’m trying to do it’s highlight the serial number that i scan from a box of items.

So when i scan the S/N. My idea is that the table, which contains the items in the box, change their color. My english sucks, so i think images can explain my idea in a better way.

So my code does the following:

First i load the table with the info from the box 1 (“Gaveta”):

http://prntscr.com/o4ykdy

Then when i filter the S/N of the item in the box:

http://prntscr.com/o4yly4

i face my problem, the search paints the correct S/N but it damages my tablemodel.

My code:

Data search:

public void buscarNumeroSerie (String nserie) { try {

             String [] campos={"NUMERO_SERIE","MARCA","GAVETA"};
             String filtroNS = nserie;
             String NSSQL = "SELECT NUMERO_SERIE,MARCA,GAVETA FROM"
                     + "(SELECT NUMERO_SERIE,MARCA,GAVETA FROM discos_wd "
                     + "UNION "
                     + "SELECT NUMERO_SERIE,MARCA,GAVETA FROM discos_toshiba "
                     + "UNION "
                     + "SELECT NUMERO_SERIE,MARCA,GAVETA FROM discos_seagate "
                     + "UNION "
                     + "SELECT NUMERO_SERIE,MARCA,GAVETA FROM discos_samsung "
                     + "UNION "
                     + "SELECT NUMERO_SERIE,MARCA,GAVETA FROM discos_hitachi )"
                     + "AS TROUBLE WHERE NUMERO_SERIE LIKE '%"+filtroNS+"%'";

            System.out.println(NSSQL); 
                    nsconn = metodosPool.dataSource.getConnection();
                    //ModeloTablaLista = new DefaultTableModel(null, campos);
                    stmnt = nsconn.prepareStatement(NSSQL);
                    ResultSet nsrs = stmnt.executeQuery(NSSQL);
                    String [] nsfila = null;
            //if(nsrs.next()== true){
             //       String [] nsfila = new String[3];



                while (nsrs.next())
                    {   
                        nsfila = new String[3];
                        nsfila[0]=nsrs.getString("Numero_Serie");
                        nsfila[1]=nsrs.getString("Marca");
                        nsfila[2]=nsrs.getString("Gaveta");
                       // ModeloTablaLista.addRow(nsfila);
                    }

                if (nsfila == null) 
                    {
                               Object[] opcionesPurga = {"Agregar Disco Hitachi",
                                   "Agregar Disco Toshiba",
                                   "Agregar Disco Seagate",
                                   "Agregar Disco Samsung",
                                   "Agregar Disco WD",
                                   "Omitir"};

                               int sinDiscoEnTabla = JOptionPane.showOptionDialog
                                            (rootPane, 
                                            "Disco no encontrado, ¿que desea hacer?:", 
                                            "Disco no encontrado", 
                                            JOptionPane.YES_NO_OPTION, 
                                            JOptionPane.QUESTION_MESSAGE, 
                                            null, 
                                            opcionesPurga,
                                            opcionesPurga[1]);

                               System.out.println(sinDiscoEnTabla);

                    switch (sinDiscoEnTabla){

                            case 0:
                            sinDiscoAddHi.setVisible(true);
                            break;

                            case 1:
                            sinDiscoAddTo.setVisible(true);    
                            break;

                            case 2:
                            sinDiscoAddSe.setVisible(true);      
                            break;

                            case 3:
                            sinDiscoAddHi.setVisible(true);        
                            break;

                            case 4:
                            sinDiscoAddWD.setVisible(true);        
                            break;

                            case 5:
                            JOptionPane.showMessageDialog(null,"Por favor ingrese un nuevo disco:");  
                            tfNumeroSeriePurga.setText("");
                            break;
                    }
                    }
                nsrs.close();
                        stmnt.close();
                       // tablaDiscosGaveta.setModel(ModeloTablaLista);
                        ClaseColor colorear = new ClaseColor(0);
                        tablaDiscosGaveta.getColumnModel().getColumn(0).setCellRenderer(colorear);
           }

           //else
           //  {

            //    System.err.println("No existen datos asociados");
            //         JOptionPane.showMessageDialog(rootPane, "Disco no encontrado, quiere:");
           //    } 


catch (SQLException nseerr) 
                    {
                      System.err.println(""+nseerr.getSQLState());
                      JOptionPane.showMessageDialog(null, "Error al buscar n"
                      +nseerr, "Error en la operacion ", JOptionPane.ERROR_MESSAGE);
                    }                    

}  

Table Renderer:

public class ClaseColor extends DefaultTableCellRenderer {

private final int patron;  

public ClaseColor(int patron) {
    this.patron = patron;
}

@Override
public Component getTableCellRendererComponent
           (JTable tablaDiscosGaveta, 
            Object value, 
            boolean Selected, 
            boolean hasFocus, 
            int row, 
            int col) 
    {

    if (!tfNumeroSeriePurga.getText().equals(tablaDiscosGaveta.getValueAt(row, patron).toString())) 

    {
        System.out.println("FramePurgar.PurgarDiscos1.ClaseColor.methodName()"+"no pille nada !");
    } 
   else
    {
        setForeground(Color.RED);
        //setFont(font);
        //
        super.getTableCellRendererComponent(tablaDiscosGaveta, value, Selected, hasFocus, row, col);
        return this;
    }

return this;

} }

What i’m trying to do is paint every S/N that matchs with the textField “Serial Number” which does the search.

Something like this:

http://prntscr.com/o4ynui

so any new S/N i search, get a mark while i keep scanning S/N, and then the S/N that are not marked, are eliminated from the table.

Advertisement

Answer

Final update at this, i fixed my problem changing the value at the following line:

   Component comp = super.getTableCellRendererComponent(tablaDiscosGaveta, col, rootPaneCheckingEnabled, rootPaneCheckingEnabled, row, col);

for

        Component comp = super.getTableCellRendererComponent(tablaDiscosGaveta, value, rootPaneCheckingEnabled, rootPaneCheckingEnabled, row, col);

Finally !

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement