Visualizzazione dei risultati da 1 a 5 su 5

Discussione: ListCellRenderer

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    6

    ListCellRenderer

    Salve a tutti. Sono nuovo in questo forum. L'ho consultato qualche volta e sono riuscito a risolvere diversi problemi. Ora però ne ho uno nuovo. Ho un JFrame con all'interno una lista. Le componenti (celle) della lista sono dei pannelli con un jlabel e due jbutton (un pò come il programma add\remove di Windows XP). Per ottenere le singole celle ho implementato in un jpanel la classe ListCellRender. Solo che quando visualizzo la finestra con la lista, è come se i bottoni fossero bloccati. Ecco il codice del programmma (con gli elementi precaricati):

    classe Main
    codice:
    public class Main {
        public static void main (String args[]) {
            Finestra f = new Finestra();
            f.pack();
            f.setVisible(true);
        }
    }
    classe Finestra
    codice:
    public class Finestra extends javax.swing.JFrame {
    
        public Finestra() {
            initComponents();
            lista.setCellRenderer(new MyRenderer());
        }
    
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
    
            jScrollPane1 = new javax.swing.JScrollPane();
            lista = new javax.swing.JList();
    
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    
            lista.setModel(new javax.swing.AbstractListModel() {
                String[] strings = { "Auto", "Moto", "Treno" };
                public int getSize() { return strings.length; }
                public Object getElementAt(int i) { return strings[i]; }
            });
            jScrollPane1.setViewportView(lista);
    
            getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
    
            pack();
        }// </editor-fold>                        
    
        // Variables declaration - do not modify                     
        private javax.swing.JScrollPane jScrollPane1;
        private javax.swing.JList lista;
        // End of variables declaration                   
    
    }
    classe MyRenderer
    codice:
    import java.awt.Component;
    import javax.swing.*;
    
    public class MyRenderer extends javax.swing.JPanel implements ListCellRenderer {
    
        public MyRenderer() {
            initComponents();
        }
        
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            labelVeicolo.setText(value.toString());
            return this;
        }
    
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
    
            labelVeicolo = new javax.swing.JLabel();
            bottoneUsa = new javax.swing.JButton();
            bottoneRimuovi = new javax.swing.JButton();
    
            labelVeicolo.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
            labelVeicolo.setText("testo");
            add(labelVeicolo);
    
            bottoneUsa.setText("Usa");
            add(bottoneUsa);
    
            bottoneRimuovi.setText("Rimuovi");
            add(bottoneRimuovi);
        }// </editor-fold>                        
    
        // Variables declaration - do not modify                     
        private javax.swing.JButton bottoneRimuovi;
        private javax.swing.JButton bottoneUsa;
        private javax.swing.JLabel labelVeicolo;
        // End of variables declaration                   
    
    }

    Grazie

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

    Re: ListCellRenderer

    Originariamente inviato da Rapier
    Solo che quando visualizzo la finestra con la lista, è come se i bottoni fossero bloccati.
    Sì ... è così .... ti devo dire purtroppo che non può funzionare come stavi pensando di fare. I "renderer" sono gestiti in un modo un po' particolare, servono solo ed esclusivamente per il "rendering" della cella cioè per visualizzare la cella e basta.
    Quando una cella deve essere disegnata, viene invocato il getListCellRendererComponent() (che ha la possibilità di cambiare qualcosa nella cella) e poi il componente restituito viene semplicemente e banalmente "stampato" a video.
    Immagina di avere uno di quei timbri inchiostrati di gomma ... prendi il timbro e lo stampi su un foglio più volte uno sotto l'altro ...
    Quelli che hai a video non sono "veri" componenti .... non hai dei pulsanti veri e propri, solo una "stampa" della cella. Quindi una cella non può avere un "comportamento" particolare. È solo di visualizzazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    6
    Ora capisco perchè non succedeva niente. Grazie della spiegazione
    Ma quindi non ci sarebbe nessun'altro modo per implementare il mio tipo di lista ?

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    96
    Con le tabelle io ho risolto più di una volta con un editor uguale al renderer e facendo partire l'edit al primo click, suppongo con le liste si possa fare altrettanto, ma dovrei controllare la documentazione per assicurartelo (sennò usa una tabella con una sola colonna ).

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dyuhs
    suppongo con le liste si possa fare altrettanto,
    No, non si può fare altrettanto ... non ci sono "editor" per JList.
    L'unica è creare tanti pannelli distinti da mettere in un contenitore (magari scrollabile) oppure usare JTable che oltre a TableCellRenderer può anche gestire un TableCellEditor.
    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.