Como que eu faço para ter em uma mesma coluna da minha JTable, componentes diferentes?

Olá pessoal, dificilmente eu posto uma dúvida num fórum pois geralmente encontro a resposta em tópicos dos proprios foruns na net porem isso não estou achando por nada e as soluções q encontrei não deram certo.
Bom vamos lah…
Tenho uma tabela que tem 2 linhas sendo q a primeira eh uma célula normal de texto e a segunda linha é composta por jcheckbox.
Mas o máximo q consegui até agora eh colocar os checkboxes porem qdo clico neles a celula entra em modo edição e o checkbox some aparecendo as Strings true ou false. Sei q isso tem a ver com o retorno do metodo getColumnClass do model da tabela porem esse metodo só recebe por parametro a coluna então nao tem como eu saber qual linha está pra mim retornar Boolean pra ela.

Se alguem puder me ajudar postarei aqui o model, renderer e editor da tabela:

class MyModel extends AbstractTableModel {

        private String[] columnNames = {
            "Tipo", "250", "500", "1000", "2000", "3000", "4000", "6000", "8000"
        };
        private Object[][] data = {
            {"Texto:", null, null, null, null, null, null, null, null},
            {"CheckBox:", new Boolean(true), new Boolean(true), new Boolean(true), new Boolean(true),
                new Boolean(true), new Boolean(true), new Boolean(true), new Boolean(true)
            }
        };

        @Override
        public boolean isCellEditable(int row, int column) {
            if (column > 0) {
                return true;
            }
            return false;
        }

        //aqui eu teria q achar um meio de retornar Boolean.class pra segunda linha da tabela
        @Override
        public Class<?> getColumnClass(int columnIndex) {
            return Object.class;
        }

        public int getColumnCount() {
            return columnNames.length;
        }

        public int getRowCount() {
            return data.length;
        }

        @Override
        public String getColumnName(int col) {
            return columnNames[col];
        }

        public Object getValueAt(int row, int col) {
            return data[row][col];
        }
    }
  public class MyCellEditor extends AbstractCellEditor implements TableCellEditor{
        private final static int TEXTFIELD = 1;
        private final static int CHECKBOX = 2;
        private JTextField textField;
        private JCheckBox checkBox;
        private int swith = 0;
        public MyCellEditor() {
            textField = new JTextField();
            textField.setBorder(null);
            checkBox = new JCheckBox("", false);
        }

        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            if (value != null) {
                if (value instanceof Boolean) {
                    swith = CHECKBOX;
                    checkBox.setSelected((Boolean) value);
                    return checkBox;
                } else {
                    swith = TEXTFIELD;
                    textField.setText(value.toString());
                    return textField;
                }
            } else {
                swith = 0;
                textField.setText("");
                return textField;
            }
        }
        //esse metodo como não recebe por parametro a linha da tabela tive q fazer uma gambiarra pra poder retornar um valor boolean pra qdo estivesse em um célula com checkbox, com certeza deve ter alguma maneira melhor de fazer isso...
        public Object getCellEditorValue() {
            if(swith==TEXTFIELD){
                return textField.getText();
            }
            if(swith==CHECKBOX){
                return (Boolean) checkBox.isSelected();
            }
            return null;
        }
    }
class MyRenderer extends DefaultTableCellRenderer {

        @Override
        public Component getTableCellRendererComponent(
                JTable table, Object value, boolean isSelected,
                boolean hasFocus, int row, int column) {

            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

            if (value instanceof Boolean) {
                return table.getDefaultRenderer(Boolean.class).getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            } else {
                return this;
            }
        }

        @Override
        public void validate() {
            super.validate();
        }

        @Override
        public void revalidate() {
            super.revalidate();
        }

        @Override
        protected void firePropertyChange(String propertyName,
                Object oldValue, Object newValue) {
            super.firePropertyChange(propertyName, oldValue, newValue);
        }

        @Override
        public void firePropertyChange(String propertyName,
                boolean oldValue, boolean newValue) {
            super.firePropertyChange(propertyName, oldValue, newValue);
        }
    }

Desde ja agradeço a atençã de vcs…

E ae Daniel! hehehehe

Cara, setou o cell editor para a linha que tu qr? Não olhei com muito cuidado pq to atucanado aqui, mas acho que tu não ta setando o cell editor. Parece estar tudo correto.

dae velho, legal te encontrar por aqui… hehehe
cara eu resolvi de outra forma, alterei o codigo gerado pelo netbeans e funcionou:

jTable1 = new javax.swing.JTable(){   
               public TableCellRenderer getCellRenderer(int row, int column){   
		if (column &gt;0 && row == 1) {   
			return getDefaultRenderer(Boolean.class);   
		} else {   
			return super.getCellRenderer(row, column);   
		}   
			}     
	public TableCellEditor getCellEditor(int row, int column){   
		if (column &gt;0 && row == 1) {   
			return getDefaultEditor(Boolean.class);   
		} else {   
			return super.getCellEditor(row, column);   
		}   
	}   
};  

nesse caso não pude utilizar o DefaultTableModel e não precisei criar meu proprio CellEditor e funcionou :slight_smile:
não tinha feito antes assim pois nãoq ueria mecher no código gerado pelo netbeans mas se não teve outro jeito…

Valeu por responder!

[quote=danielpk7]dae velho, legal te encontrar por aqui… hehehe
cara eu resolvi de outra forma, alterei o codigo gerado pelo netbeans e funcionou:
[/quote]

Cuidado… Creio que vc tenha inserido seu código da forma correta (pela IDE) e não alterando o arquivo .java.