Colorindo Tabela

2 respostas
Michel_Max

Bom Pessoal a história é um seguinte estou desenvolvendo um componente novo, Chama _TblField com uma série de funções que agilizam a programação.

o que eu queria era desenvolver mais uma função que colorisse as células consgui um código que faz isso mas quando tentei implementar no meu componente nada acontesse.

código que achei:

package calculadorajava;   
  
import java.awt.Color;   
import java.awt.Component;   
import java.awt.Font;   
import java.util.Vector;   
  
import javax.swing.JFrame;   
import javax.swing.JTable;   
import javax.swing.table.DefaultTableCellRenderer;   
import javax.swing.table.DefaultTableModel;   
  
/**  
 * @author Ronald Tetsuo Miura  
 */  
public class Teste extends DefaultTableCellRenderer {   
  
 /** */  
    private Font fontePadrao = new Font("monospaced", Font.BOLD, 12);   
  
 /**  
 * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable,  
 * java.lang.Object, boolean, boolean, int, int)  
 */  
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
        Component c = super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
        c.setFont(this.fontePadrao);   
        c.setForeground(Color.green);   
        c.setBackground(Color.black);   

        return c;   
    }   

    /**  
    * @param args  
    */  
    public static void main(String[] args) {   
        Vector header = new Vector();   
        header.add("Teste1");   
        header.add("Teste2");   
        header.add("Teste3");   
        header.add("Teste4");   

        Vector data = new Vector();   
        for (int i = 0; i < 10; i++) {   
            Vector row = new Vector();   
            row.add("Teste1");   
            row.add("Teste2");   
            row.add("Teste3");   
            row.add("Teste4");   
            data.add(row);   
        }   
        JTable table = new JTable(new DefaultTableModel(data, header));   
        table.setDefaultRenderer(Object.class, new Teste());   

        JFrame frame = new JFrame();
        frame.getContentPane().add(table);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(640, 480);
        frame.setVisible(true);
    }
}
meu componente "_TblField"
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


package MM_Package;


/**
 *
 * @author Michel
 */
public class _TblField extends javax.swing.JTable {
    private String Caption;
    private Object[][] Dados;
    private String Tag;
    private String[] Titulos;    
    private String[] WidthCols;
    public _TblField(){
        super();
    }
    public String GetCaption(){
        return Caption;
    }
    public Object[] GetDado(int iRow){
        int iInd = 0;
        Object[] sReturn = null;
        if (Dados.length>0 && Dados[0].length>0){
            for(iInd=0;iInd<=Dados.length-1;iInd++){
                if (iInd==iRow){
                    sReturn = Dados[iInd];
                    return sReturn;
                }
            }
        }
        return sReturn;
    }
    public Object[][] GetDados(){
        return Dados;
    }
    public Object[][] GetDados(int[] iRow){
        int iInd = 0;
        int iIndY = 0;
        int iCountLines = 0;
        Object[][] sRetorno = null;
        if (Dados.length>0 && Dados[0].length>0){
            Object[][] sMount = new Object[Dados.length][Dados[0].length];
            for(iInd=0;iInd<=Dados.length-1;iInd++){
                for(iIndY=0;iIndY<=iRow.length-1;iIndY++){
                    if (iInd==iRow[iIndY]){
                        sMount[iCountLines] = Dados[iInd];
                        iCountLines=iCountLines+1;
                    }
                }
            }
            sRetorno = new Object[iCountLines][Dados[0].length];
            for(iInd=0;iInd<=iCountLines-1;iInd++){
                sRetorno[iInd]=sMount[iInd];
            }
        }
        return sRetorno;
    }
    public boolean GetSizableStateCols(){
        return this.getTableHeader().getResizingAllowed();
    }
    public int GetRows(){
        return this.getRowCount();
    }
    public int GetSelectedRow(){
        return this.getSelectedRow();
    }
    public int[] GetSelectedsRows(){
        return this.getSelectedRows();
    }
    public String GetTag(){
        return Tag;
    }
    public String[] GetTitulos(){
        return Titulos;
    }
    public String[] GetWidthCols(){
        return WidthCols;
    }
    public void SetAddDados(String[] sDados){
        if (Dados[0].length == sDados.length){
            Object[][] sMount = new String[Dados.length + 1][Dados[0].length];
            int iMaxPriCasa = Dados.length - 1;
            int iMaxSegCasa = Dados[0].length - 1;
            int iIndX=0;
            int iIndY=0;
            for(iIndX=0;iIndX<=iMaxPriCasa;iIndX++){
                for(iIndY=0;iIndY<=iMaxSegCasa;iIndY++){
                    sMount[iIndX][iIndY]=Dados[iIndX][iIndY];
                }
            }
            for(iIndY=0;iIndY<=iMaxSegCasa;iIndY++){
                sMount[sMount.length -1][iIndY]=sDados[iIndY];
            }
            Dados = sMount;
            javax.swing.table.DefaultTableModel DfModel = new javax.swing.table.DefaultTableModel(sMount, Titulos);
            this.setModel(DfModel);
        }
    }
    public void SetAlignment(int iCol, int iAlignment){
        javax.swing.table.DefaultTableCellRenderer r = new javax.swing.table.DefaultTableCellRenderer();  
        switch(iAlignment){
            case 0:
                r.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
                break;
            case 1:
                r.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
                break;
            case 2:
                r.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
                break;
            default:
                r.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        }
        this.getColumnModel().getColumn(iCol).setCellRenderer(r);
    }
    public void SetCaption(String sTexto){
        Caption = sTexto;
    }
    public void SetLista(String[] sTitulos, Object[][] sDados){
        Titulos = sTitulos;
        Dados = sDados;
        javax.swing.table.DefaultTableModel DfModel = new javax.swing.table.DefaultTableModel(sDados, sTitulos);
        this.setModel(DfModel);
    }
    public void SetRemoveRow(int iRow){
        if(iRow<=(Dados.length-1) && iRow>=0){
            Object[][] sMount = new String[Dados.length - 1][Dados[0].length];
            int iMaxPriCasa = Dados.length - 1;
            int iMaxSegCasa = Dados[0].length - 1;
            int iIndX=0;
            int iIndXAux=0;
            int iIndY=0;
            for(iIndX=0;iIndX<=iMaxPriCasa;iIndX++){
                if (iIndX==iRow){
                    iIndXAux=iIndXAux - 1;
                }
                else{
                    for(iIndY=0;iIndY<=iMaxSegCasa;iIndY++){
                        sMount[iIndXAux][iIndY]=Dados[iIndX][iIndY];
                    }
                }
                iIndXAux=iIndXAux + 1;
            }
            Dados = sMount;
            javax.swing.table.DefaultTableModel DfModel = new javax.swing.table.DefaultTableModel(sMount, Titulos);
            this.setModel(DfModel);
        }
    }
    public void SetSelectionByCell(){
        this.setCellSelectionEnabled(true);
    }
    public void SetSelectionByMultiRow(){
        this.setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    }
    public void SetSelectionByUniqueRow(){
        this.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
    }
    public void SetSizableStateCols(boolean bStado){
        this.getTableHeader().setResizingAllowed(bStado);
    }
    public void SetTag(String sTag){
        Tag = sTag;
    }
    public void SetTitulos(String[] sTitulos){
        if (Dados.length>0 && Dados[1].length>0){
            javax.swing.table.DefaultTableModel DfModel = new javax.swing.table.DefaultTableModel(Dados, sTitulos);
            this.setModel(DfModel);
        }
    }
    public void SetWidthCol(String[] sColumns){
        int iInd=0;
        for(iInd=0;iInd<=sColumns.length-1;iInd++){
            javax.swing.table.TableColumn column = this.getColumnModel().getColumn(iInd);
            column.setPreferredWidth(Integer.parseInt(sColumns[iInd]));
        }
        WidthCols=sColumns;
    }
}

não sei mais o que fazer :thumbdown: alguém pode ajudar?

2 Respostas

victorwss

Você vai precisar definir o TableModel. Com o TableModel você define o ColumnModel. Com o ColumnModel você define o CellRenderer. E o CellRenderer faz a mágica que você quer.

ViniGodoy

Do jeito que o Victor falou é MUITO mais fácil e elegante.

Pode começar por aqui:
http://www.informit.com/articles/article.aspx?p=332278&rl=1

Criado 9 de janeiro de 2008
Ultima resposta 9 de jan. de 2008
Respostas 2
Participantes 3