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

    Rendering di JLabel in JTable - Cambio colore Background a selezione riga

    codice:
    class JLabelRenderer extends DefaultTableCellRenderer {
        
    	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    	{
            if (isSelected) {
                setOpaque(true);
                setBackground(table.getSelectionBackground());
                setForeground(table.getSelectionForeground());
            } else {
                setOpaque(false);
                setBackground(table.getBackground());
                setForeground(table.getForeground());
            }
    		
    	return value instanceof JLabel ? (JLabel)value : super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    	}
    }
    Ho creato questo Renderer per una JTable che mi visualizza in una colonna di tale JTable una JLabel con un'immagine. Funziona tutto perfettamente soltanto che alla selezione di una generica riga della JTable questa viene tutta evidenziata, ossia il colore di background mutato, tranne che nella cella contenente la mia JLabel con l'icona.

    Ho aggiunto quel controllo if(isSelected) pensando di risolvere così ma invano, sicuramente sbaglio, anche perchè non sono molto pratico di Renderer vari in java.

    Qualcuno mi sa dire come modificare questo Renderer per far si che la cella contenente la JLabel venga evidenziata assieme al resto della riga associata?

    GRAZIE

  2. #2

    RISOLTO...POSTO IL PROCEDIMENTO...MAGARI SERVISSE A QUALCUNO

    codice:
           class JLabelRenderer extends DefaultTableCellRenderer {
    
    
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            JLabel label = (JLabel) value;
            label.setOpaque(true);
            label.setBackground(table.getBackground());
            label.setForeground(table.getForeground());
            if (isSelected) {
                label.setBackground(table.getSelectionBackground());
                label.setForeground(table.getSelectionForeground());
            }
            if (hasFocus) {
                label.setBorder(BorderFactory.createLineBorder(Color.RED));
            }
    
            return value instanceof JLabel ? (JLabel) value : super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        }
    }
    Questa Renderer è funzionante e evidenzia anche la cella contenente l'immagine.

    grazie lo stesso!

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: RISOLTO...POSTO IL PROCEDIMENTO...MAGARI SERVISSE A QUALCUNO

    Originariamente inviato da fabiolinux85
    Questa Renderer è funzionante
    Ma è discutibile l'approccio. Dal codice si evince che i tuoi value sono in effetti dei JLabel. Quindi nel "model" hai messo dei componenti JLabel. Il model dovrebbe contenere solo dati (al massimo dei Icon/ImageIcon) .... non componenti AWT/Swing.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.