Avatar billede mungojerrie Nybegynder
26. september 2005 - 11:11 Der er 4 kommentarer og
1 løsning

StdTableCellRenderer extends DefaultTableCellRenderer

hej

Når man benytter en DefaultTableCellRenderer så plejer den selv at vis eksempelvis boolean objecter som en checkbox og det vil jeg også gerne have min klasse som extender DefaultTableCellRenderer til, men det er ikke helt lykkedes.

Årsagen til jeg extender DefaultTableCellRenderer er at jeg gerne vil have en anden baggrundsfarve på mine celler, hvor det er data i den enkelte celle der afgør farven.

Er der nogen som kan guide mig til en løsning hvor jeg både kan få mine farver vist og samtidig få vist en checkbox, såfremt at cellens object er en Boolean.

---------------kode------------------

package dk.elopak.client.gui.renderer;

import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

import dk.elopak.client.data.DefaultServerDataView;
import dk.elopak.server.util.Converter;

/**
* @author Jan Gravgaard
*
*/
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();
        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 3: setText(Converter.formatDate(o)); break;
                case 4: setText(Converter.formatNumber(o)); break;
                case 5: setText(Converter.formatNumber(o)); break;
                default: setText(o.toString()); break;
            }
            setToolTipText(o.toString());
        }else{
            setText("");
        }
       
        if (isSelected) {
              //super.setForeground(jtable.getSelectionForeground());
              super.setBackground(jtable.getSelectionBackground());
        }
        return this;
    }
   

}
Avatar billede _carsten Nybegynder
26. september 2005 - 14:50 #1
Du mangler sikkert at fortælle din TableModel at kolonnen er en Boolean.class

Går ud fra at det er hele kolonnen og ikke kun udvalgte celler som har en checkbox.
Avatar billede mungojerrie Nybegynder
26. september 2005 - 14:53 #2
hmm, måske

jeg har jo denne metode:

    /**
    * @return Class
    */   
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

Skulle den ikke gøre tricket ?? :-)
Avatar billede _carsten Nybegynder
26. september 2005 - 15:38 #3
Jo, men den returnerer null alt afhængig af hvad du har angivet kolonnerne til at indholde

Test på følgende måde:

    /**
    * @return Class
    */   
    public Class getColumnClass(int c) {
        if( c == 2)  // LIG DEN KOLONNE DET DREJER SIG OM
            return Boolean.class;
        else
            return getValueAt(0, c).getClass();
    }
Avatar billede mungojerrie Nybegynder
26. september 2005 - 15:51 #4
ahh, det var jo næsten for nemt.... :-)
smid et svar....
Avatar billede _carsten Nybegynder
26. september 2005 - 16:34 #5
:)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester