19. september 2005 - 19:19
Der er
15 kommentarer og 1 løsning
JTable og getTableCellRendererComponent
Hej Jeg vil lige høre hvornår metoden getTableCellRendererComponent bliver kaldt. Jeg benytter metoden til at give alle mine celler en anden baggrund, da mine data kan indholde en farve i kolonne 0 som så bliver brugt til baggrundsfarven. Problemet er at selvom jeg angiver en "null" i min data for kolonne 0, så bliver der alligevel vist farven fra foregående kolonne, hvor der gemmer sig en farve. public Component getTableCellRendererComponent(JTable jtable, Object o, boolean isSelected, boolean hasFocus, int row, int column) { Color color = (Color)TableModel.getValueAt(row, 0); if(color!=null)setBackground(color); } Men det er nok en fejl 40 :-)
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
20. september 2005 - 08:22
#1
Kunne vi ikke se en lidt mere specifik kode (hvor / hvordan du anvender den ) Umiddelbart ser det ikke rigtigt ud.
20. september 2005 - 09:44
#2
kode skal du få :-) public class StdTableCellRenderer extends DefaultTableCellRenderer { /** * constructor * */ public StdTableCellRenderer() { setOpaque(true); //MUST do this for background to show up. } public Component getTableCellRendererComponent(JTable jtable, Object o, boolean isSelected, boolean hasFocus, int row, int column) { DefaultServerDataView dsdv = (DefaultServerDataView)jtable.getModel(); Color color = (Color)dsdv.getValueAt(row, 0); if(color!=null){ setBackground(color); } } } public class ConverterServerDataView extends DefaultServerDataView { public void setUpTableColumns(JTable table) { StdTableCellRenderer scr = new StdTableCellRenderer(); .................. table.getColumnModel().getColumn(Ordre.HASTE_DATO_COL).setCellRenderer(scr); .................. } } public abstract class DefaultServerDataView extends DefaultTableModel { public DefaultServerDataView(Object[][] data, String[] headers){ super(data, headers); columnNames = headers; dataRows = data; } }
20. september 2005 - 10:45
#3
Skulle lige se om du brugte din egen cellRenderer RET: if(color!=null){ setBackground(color); } TIL: if( o !=null){ setBackground(color); } else setBackground(new Color.YELLOW); Så skulle det virke
20. september 2005 - 10:47
#4
Ps. DefaultServerDataView dsdv = (DefaultServerDataView)jtable.getModel(); Color color = (Color)dsdv.getValueAt(row, 0); Skal ikke bruges til noget i den forbindelse !
20. september 2005 - 10:49
#5
øhhh, hvis jeg ikke skal bruge: DefaultServerDataView dsdv = (DefaultServerDataView)jtable.getModel(); Color color = (Color)dsdv.getValueAt(row, 0); hvor skal jeg så få min color fra ?? :-)
20. september 2005 - 11:02
#6
Jeg har vist misforstået dig. Dit farvevalg sker udfra et Color object i kolonne 0, eller hva ?? Men du mangler et return statement - for du ikke compilefejl ??? public Component getTableCellRendererComponent(JTable jtable, Object o, boolean isSelected, boolean hasFocus, int row, int column) { DefaultServerDataView dsdv = (DefaultServerDataView)jtable.getModel(); Color color = (Color)dsdv.getValueAt(row, 0); if(color!=null){ setBackground(color); } return this; }
20. september 2005 - 11:06
#7
ja, jeg sætter farven udfra værdien i dsdv.getValueAt(row, 0); koden er ikke fuldstændig, så jo der mangler et return statement hele metoden er her: public Component getTableCellRendererComponent(JTable jtable, Object o, boolean isSelected, boolean hasFocus, int row, int column) { DefaultServerDataView dsdv = (DefaultServerDataView)jtable.getModel(); Color color = (Color)dsdv.getValueAt(row, 0); if(color!=null){ setBackground(color); }else{ setBackground(getBackground()); } if(o!=null){ switch (column) { case 0: setText(formatDate(o)); break; case 3: setText(formatDate(o)); break; case 4: setText(formatNumber(o)); break; case 5: setText(formatNumber(o)); break; default: setText(o.toString()); break; } }else{ setText(""); } if (hasFocus) { setBorder( UIManager.getBorder("Table.focusCellHighlightBorder") ); if (jtable.isCellEditable(row, column)) { super.setForeground( UIManager.getColor("Table.focusCellForeground") ); super.setBackground( UIManager.getColor("Table.focusCellBackground") ); } } else { setBorder(noFocusBorder); } color = null; return this; }
20. september 2005 - 11:44
#8
Får du slet ingen compilefejl ??
20. september 2005 - 11:56
#9
nej, synes du jeg burde det ? og i såfald hvorhenne ?
20. september 2005 - 12:46
#10
Den her; Color color = (Color)dsdv.getValueAt(row, 0); Bør give compile eller runtimefejl ! Gør den ikke det ??? Hvis ikke - tvivler jeg på du anvender den !!
20. september 2005 - 12:52
#11
er nu ret sikker på den bliver brugt da alle mine rækker får baggrundsfarven blå som er i mine data i række 0 kolonne 0 men vi kan godt blive enige om at den burde fejle, hvis ikke der er et Color obj i cellen
20. september 2005 - 13:06
#12
så fik jeg det til at virke.... kode: public Component getTableCellRendererComponent(JTable jtable, Object o, boolean isSelected, boolean hasFocus, int row, int column) { DefaultServerDataView dsdv = (DefaultServerDataView)jtable.getModel(); Object obj = dsdv.getValueAt(row, 0); Color color = null; if(obj instanceof Color){ color = (Color)dsdv.getValueAt(row, 0); } if(color!=null){ setBackground(color); }else{ super.setBackground(jtable.getBackground()); } if(o!=null){ switch (column) { case 0: setText(formatDate(o)); break; case 3: setText(formatDate(o)); break; case 4: setText(formatNumber(o)); break; case 5: setText(formatNumber(o)); break; default: setText(o.toString()); break; } }else{ setText(""); } if (isSelected) { //super.setForeground(jtable.getSelectionForeground()); super.setBackground(jtable.getSelectionBackground()); } return this; }
20. september 2005 - 13:22
#13
Lyder fornuftigt :)
20. september 2005 - 13:31
#14
jeg vil nu gerne give dig point som tak for hjælpen :-)
20. september 2005 - 13:35
#15
Jeg er med på en deler - fatter ikke at jeg overså den, mener dog stadig den vil give runtimefejl, det kan ikke være anderledes.
20. september 2005 - 13:36
#16
du får bare det hele :-)
Kurser inden for grundlæggende programmering