CheckBox em JTable Alguem sabe como fazer?

3 respostas
Michel_Max

Bom gente, estou desenvolvendo um novo componente de tabela e ja estou nos finalmentes, porém não consigo inserir um JChekBox no JTable :?: :x, e por mais que eu procure no forum não vi niguem que fez isso numa classe onde ela extende a JTable, se aguem tiver alguma solução, para mim basta conseguir colocar em todas as linhas da coluna 0 :lol:.

grato, segue abaixo código do _TblField

package MM_Package;

public class _TblField extends javax.swing.JTable {
    private String Caption;
    private Object[][] Dados;
    private String DefaultHexBgColor;
    private String DefaultHexFtColor;
    private boolean DragDrop;
    private boolean Editable;
    private JHexToDec jHD = new JHexToDec();
    private JTableRenderer jTR = new JTableRenderer();
    private String Tag;
    private String[] Titulos;    
    private String[] WidthCols;
    public _TblField(){
        super();
    }
    public String GetAllBgColor(){
        return DefaultHexBgColor;
    }
    public String GetAllFtColor(){
        return DefaultHexFtColor;
    }
    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 GetDragDrop(){
        return DragDrop;        
    }
    public boolean GetEditable(){
        return Editable;
    }
    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 SetAllBgColor(String sHexBgColor){
        int[] iRGBColor;
        javax.swing.JColorChooser cColor = new javax.swing.JColorChooser(); 
        DefaultHexBgColor = sHexBgColor;
        jHD.SetValor(sHexBgColor);
        iRGBColor = jHD.GetValorDecimal();
        cColor.setColor(iRGBColor[0], iRGBColor[1], iRGBColor[2]);
        this.setDefaultRenderer(Object.class, jTR);
        jTR.setBackground(cColor.getColor());
        this.SetLista(Titulos, Dados);
    }
    public void SetAllFtColor(String sHexColor){
        int[] iRGBColor;
        javax.swing.JColorChooser cColor = new javax.swing.JColorChooser(); 
        DefaultHexFtColor = sHexColor;
        jHD.SetValor(sHexColor);
        iRGBColor = jHD.GetValorDecimal();
        cColor.setColor(iRGBColor[0], iRGBColor[1], iRGBColor[2]);
        this.setDefaultRenderer(Object.class, jTR);
        jTR.setForeground(cColor.getColor());
        this.SetLista(Titulos, Dados);
    }
    public void SetCaption(String sTexto){
        Caption = sTexto;
    }
    public void SetDragDrop(boolean bStatus){
        DragDrop = bStatus;
        this.getTableHeader().setReorderingAllowed(bStatus);
    }
    public void SetEditable(boolean sEditable){
        Editable = sEditable;
        if (sEditable==false){
            javax.swing.table.DefaultTableModel DfModel = new javax.swing.table.DefaultTableModel(Dados, Titulos){   
                public boolean isCellEditable(int rowIndex, int mColIndex) {   
                    return false;   
                }   
            };
            this.setModel(DfModel);
        }
        else{
            javax.swing.table.DefaultTableModel DfModel = new javax.swing.table.DefaultTableModel(Dados, Titulos);
            this.setModel(DfModel);
        }
    }
    public boolean GetSizableStateCols(){
        return this.getTableHeader().getResizingAllowed();
    }
    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 SetOrder(){
        Dados=QuickSort(Dados);
        SetLista(Titulos,Dados);
    }
    public void SetOrder(int iCol){
        Object[][] oOrdena =new Object[Dados.length][Dados[0].length] ;
        int iInd=0;
        int iIndY=0;
        boolean bPassou=false;
        for(iInd=0;iInd<oOrdena.length;iInd++){
            for(iIndY=0;iIndY<oOrdena[iInd].length;iIndY++){
                if (bPassou==false && iIndY==iCol){
                    oOrdena[iInd][0]=Dados[iInd][iIndY].toString();
                    bPassou=true;
                }
                else{
                    if (iIndY==0){
                        oOrdena[iInd][iCol]=Dados[iInd][iIndY].toString();
                    }
                    else{
                        oOrdena[iInd][iIndY]=Dados[iInd][iIndY].toString();
                    }
                }
            }
            bPassou=false;
        }
        oOrdena=QuickSort(oOrdena);
        for(iInd=0;iInd<oOrdena.length;iInd++){
            for(iIndY=0;iIndY<oOrdena[iInd].length;iIndY++){
                if (bPassou==false && iIndY==0){
                    Dados[iInd][iCol]=oOrdena[iInd][iIndY].toString();
                    bPassou=true;
                }
                else{
                    if (iIndY==iCol){
                        Dados[iInd][0]=oOrdena[iInd][iIndY].toString();
                    }
                    else{
                        Dados[iInd][iIndY]=oOrdena[iInd][iIndY].toString();
                    }
                }
            }
            bPassou=false;
        }
        SetLista(Titulos,Dados);
    }
    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;
    }
    private Object[] QuickSort(Object[] oVetor){
        java.util.Arrays.sort(oVetor);
        return oVetor;
    }            
    private Object[][] QuickSort(Object[][] oVetor){
        Object[] oOrdena =new Object[oVetor.length] ;
        int iInd=0;
        int iIndY=0;
        for(iInd=0;iInd<oOrdena.length;iInd++){
            oOrdena[iInd]="";
        }
        for(iInd=0;iInd<oOrdena.length;iInd++){
            for(iIndY=0;iIndY<oVetor[iInd].length;iIndY++){
                oOrdena[iInd]=oOrdena[iInd].toString() + oVetor[iInd][iIndY].toString() + ";" ;
            }
        }
        java.util.Arrays.sort(oOrdena);
        for(iInd=0;iInd<oOrdena.length;iInd++){
            for(iIndY=0;iIndY<oVetor[iInd].length;iIndY++){
                oVetor[iInd][iIndY]=ImportData(oOrdena[iInd].toString(),iIndY+1);
            }
        }
        return oVetor;
    }            
    private String ImportData(String sVetor,long lPosicao){
        int iInd;
        long lPosiAtua;
        int iContVal;
        sVetor = sVetor.trim();
        lPosiAtua = 1;
        iContVal = 0;
        for(iInd=1;iInd<=sVetor.length();iInd++){
            if (String.valueOf(Mid(sVetor, iInd, 1)).equals(";")){
                if(lPosiAtua == lPosicao){
                    return Mid(sVetor, iInd - iContVal, iContVal);
                }
                else{
                    lPosiAtua = lPosiAtua + 1;
                    iContVal = 0;
                }
            }
            else{
                iContVal = iContVal + 1;
            }
        }
        return "";
    }
    private String Mid(String sTexto, int iInicio, int iQuantidade){
        sTexto = sTexto.substring(iInicio - 1, (iInicio - 1) + iQuantidade);
        return sTexto;
    }
}
>

3 Respostas

Z

Fala…
‘how to use jtable’ no google …

Jeferson_Flamini

Vc tem que substituir o renderer da coluna, veja em http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#renderer

ViniGodoy

Não precisa ir tão longe. Aliás, nem existe um renderer de checkbox público e padrão.
Esse é certamente um dos piores jeitos de resolver o problema.

Em primeiro lugar, e muito importante, aprenda a criar o seu próprio TableModel, filho de AbstractTableModel, e pare de usar o DefaultTableModel ou extender JTable.

Existe um excelente tutorial em inglês aqui:
http://www.informit.com/articles/article.aspx?p=332278

Siga-o.

Então, você vai ver que basta fazer o método getTableColumnClass retorna Boolean.class, e a tabela exibirá checkboxes. E você vai ver que essa herança que você fez é completamente inútil.

Criado 25 de janeiro de 2008
Ultima resposta 25 de jan. de 2008
Respostas 3
Participantes 4