01. juni 2004 - 12:22Der er
7 kommentarer og 1 løsning
Hvordan bruger jeg en cellrenderer?
Hejsa Jeg har fået stykket understående klasse sammen ud fra diverse spg og svar her på exp, da jeg gerne vil have en JList med checkboxes i. package beregnafstand;
Jeg er i tvivl om, hvordan jeg bruger det. Altså i mit tilfælde siger jeg: private JList jLRoute = new CheckBoxList(); ..... jLRoute.setModel(routeListModel);
og nu vil jeg så gerne have tilføjet nogle elementer, så der kan afkrydses. 1)Hvordan gør jeg det? 2)Jeg forstår ikke helt hvad der sker i public Component getListCellRendererComponent. Altså der bliver initialiseret nogle objekter og simple datatyper, men de får jo ingen værdi....
Jeg håber nogen kan give mig en uddybende forklaring, mvh Torben
Normalt synes jeg det er en bagatel at arbejde med cellRenderer og cellEditorer, men det er det ved gud ikke når det drejer sig om JCheckBox, den eneste måde jeg kan få det til at virke på, er at lade elementerne i JListen bestå af Objecter (klassen Item) som jeg selv konstruerer, og jeg har prøvet et par tusinde forskellige måder de sidste par timer, men det er det eneste jeg kan få til at fungere.
Gem hele koden i én fil, JFrame_1 og kompile
Skal der en uddybende forklaring til, bliver det ikke før i morgen.
public static void main(String args[]) { new JFrame_1().show(); }
public void mouseClicked(java.awt.event.MouseEvent e) {} public void mouseEntered(java.awt.event.MouseEvent e) {} public void mouseExited(java.awt.event.MouseEvent e) {} public void mouseReleased(java.awt.event.MouseEvent e) {} public void mousePressed(java.awt.event.MouseEvent e) { Item it = (Item)jList1.getSelectedValue();
Lidt forklaring til getListCellRendererComponent() Metoden getListCellRendererComponent, kaldes hver gang en celle skal gentegnes, de 5 parametre udgør JList list // Reference til JList instancen Object value // Det object som skal tegnes af renderen int index // Nr i JListen boolean isSelected // true, hvis den aktuelle celle er valgt boolean cellHasFocus // true, hvis den aktuelle celle har focus
Eller sagt på en anden måde, en JList vil altid spørge sin cellRenderer hvordan den skal vise de elementer den indeholder, i ovenstående eksempel finder JListen altså ud af, at dens cellRenderer er en klasse som hedder MyCheckBoxRenderer, den forventer at klassen implementerer metoden getListCellRendererComponent() (hvilket jo er tilfældet), derefter kalder JListen getListCellRendererComponent() som returnerer en java.awt.Component (JCheckBox) og den viser så JCheckBox'en i listen.
Du tilføjer elementer til listen, ved at adde flere elementer til Item[] her burde jeg nok have brugt en Vector istedet for, gør det nemmere at tilføje elementer.
Det er helt kanon Carsten! Det lyder til at du har brugt lang tid på det, så jeg smider lige flere point i puljen - det må jo betegnes som et svært spørgsmål så.
Jeg har dog formentligt(kæmper pt.) et par yderligere problemer(i den her forbindelse), er det okay med dig, hvis jeg så holder spørgsmålet åbent og løbende afsætter flere og flere point til dig? Eller ser du helst jeg opretter et spørgsmål på ny?
Nå, det gik nu meget smertefrit med resten, så jeg har ikke rigtig flere spørgsmål i den forbindelse. Jeg ville dog gerne hvis jeg kunne få dig til at uddybe hvad "?" og ":" betyder i fx denne linie: setBackground(isSelected ? list.getSelectionBackground() : list.getBackground());
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.