Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Alternare i colori delle righe di una JTable

    Vorrei modificare il colore di sfondo delle righe di una JTable in modo da alternare i colori.

    Ho scritto questo render e sembra funzionare:

    codice:
    public class AlternateTableCellRender extends DefaultTableCellRenderer {
        @Override
        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);
    
            if (row % 2 == 0) {
                label.setBackground(Color.white);
            } else {
                label.setBackground(new Color(204, 204, 255));
            }
            
            return label;
        }
    }
    Il risultato è questo:



    (non guardate i tag che sono sparati a caso)


    Quello che vorrei fare è fare in modo che l'alternanza non sia una riga si ed una no ma variabile a seconda del numero di categorie presenti (nel senso: tutti le righe objective c in bianco, tutto python in azzurrino ecc) :master:

    Come posso modificare il render? Ho capito che il "problema" è in if (row % 2 == 0) ma non saprei come modificarlo...

    Grazie
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ho fatto qualche modifica ed ho ottenuto questo:


    codice:
    public class AlternateTableCellRender extends DefaultTableCellRenderer {
    
        private ArrayList<Tag> tagsList;
        private static final Color MY_BLUE = new Color(204, 204, 255);
        private Color oldColor = Color.WHITE;
        private Color newColor = MY_BLUE;
    
        public AlternateTableCellRender(ArrayList<Tag> tagsList) {
            this.tagsList = tagsList;
        }
    
        /**
         * Restituisce il render delle celle della tabella.
         * @param table la tabella
         * @param value il valore nella cella corrente
         * @param isSelected <code>true</code> se la cella e' selezionata
         * @param hasFocus <code>true</code> se la cella ha il focus
         * @param row l'indice della riga
         * @param col l'indice della colonna
         * @return il componente da mostrare nella tabella nella cella (row, col)
         */
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int col) {
            JLabel label = new JLabel(value.toString(), JLabel.CENTER);
            label.setFont(new Font("Dialog", Font.PLAIN, 12));
            label.setOpaque(true);
            label.setForeground(Color.BLACK);
    
            String a = tagsList.get(row).getCategory();
            String b = tagsList.get(row == (tagsList.size() - 1) ? row : row + 1).getCategory();
            
            if (a.equals(b)) {
                newColor = oldColor;
            } else {
                newColor = oldColor.equals(MY_BLUE) ? Color.WHITE : MY_BLUE;
            }
    
            label.setBackground(newColor);
            return label;
        }
    
    }

    Cosa mi sfugge? :master:
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ho notato un'altro problemino col codice del post precedente: se clicco nei JCheckBox e in qualche cella (a random) l'alternanza dei colori va a farsi fo**ere e si "incasina tutto"... Cos'ho sbagliato?

    :master:
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.