Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Colorare righe jtable in base a contenuto

    Salve ragazzi,

    il mio problema è il seguente:

    Ho una tabella con 3 colonne. La seconda e la terzo colonna contengono rispettivamente le quantita e la soglia minima di un articolo.


    Vorrei una jtable che se il valore della colonna 2(quantità) è < della colonna 3(soglia minima) l'intera riga si colori di rosso altrimenti di un altro colore.

    Ho provato e riprovato ma sono riuscito solamente a colorare una sola colonna se viene soddisfatta la condizione.

    Mostro codice.

    codice:
    TableColumn c;
    	   	RendererTableBodyOrdini rtb = new RendererTableBodyOrdini();
    
    	   	/* Per ogni colonna presente nella tua tabella devi inserire queste righe di codice */      
    	   	c = table.getColumnModel().getColumn(2);
    	   	c.setCellRenderer(rtb);
    
    
    public class RendererTableBodyOrdini implements TableCellRenderer {
    	    public Component getTableCellRendererComponent(
    	        JTable table, Object value, boolean isSelected,
    	        boolean hasFocus, int row, int col) {
    	 
    	    	JLabel label = new JLabel("");
    	        label.setHorizontalAlignment(JLabel.CENTER);
    	        label.setFont(new Font("Dialog", Font.PLAIN, 12));
    	        label.setText(value.toString());
    	        label.setOpaque(true);
    	        label.setForeground(Color.black);
                int soglia = Integer.parseInt(value.toString());
    	        if (soglia < 10) {
    	            label.setBackground(Color.RED);
    	            
    	        } else {
    	            label.setBackground(new Color(204, 204, 255));
    	        }
    	       
    	        return label;
    	    }
    	}

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    No, il Renderer va bene per colorare una singola cella in base al valore di quella cella. Per colorare un'intera riga devi estendere JTable ed effettuare l'override del metodo prepareRenderer(). Un esempio:

    codice:
        private class CustomTable extends JTable {
    
            private TuoModello modello;   // Sarà un riferimento al TableModel
    
            public CustomTable(TuoModello tableModel) {
                super(tableModel);
                modello = tableModel;
            }
    
            @Override
            public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
                Component rendererComponent = super.prepareRenderer(renderer, row, column);
    
                if (!isCellSelected(row, column)) {
                    // Se la cella NON E' selezionata, verifico
                    // se sussiste la condizione per colorarla
    
                    // Inizialmente la cella sarà BIANCA
                    rendererComponent.setBackground( Color.WHITE );
    
                    // Ottengo la riga della tabella
                    TuaRiga tr = modello.getRow( row );
                    if ( condizione_per_colorare_la_riga ) {
    
                        // La condizione è verificata: coloro la cella di ROSSO
                        rendererComponent.setBackground( Color.RED );
                    }
                }
    
                return rendererComponent;
            }
        }
    Questo metodo verrà richiamato automaticamente su tutte le celle. Tutte le celle di una riga verranno colorate in base alla condizione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.