Jtable com JtextField e Jbutton

Bom dia,

Não estou a perceber muito bem como funciona o AbstractCellEditor, está aparecer tudo porém não consigo passar o focus nem para os jtextfield nem o jbutton.

Tenho este codigo mas suponho que esteja muita coisa errada.

class TablEditor extends AbstractCellEditor implements TableCellEditor, TableCellRenderer {

        JPanel panel;
        JLabel label;
        JTextField text1;
        JTextField text2;
        JButton showButton;
        ArrayList<Teste> teste;

        public TablEditor(ArrayList<Teste> teste) {
            this.teste = teste;
        }

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

            panel = new JPanel();
            text1 = new JTextField(10);
            text2 = new JTextField(10);
            label = new JLabel("Boa!!");
            showButton = new JButton("View Articles");
            showButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    System.out.println("skjfskljflsdjf");
                }
            });
            panel.setLayout(new FlowLayout(FlowLayout.LEFT));

            text1.setText(teste.get(row).getName());
            text2.setText(teste.get(row).getTexto());

            panel.add(text1);
            panel.add(text2);
            panel.add(label);
            panel.add(showButton);

            if (!isSelected) {
                panel.setBackground(Color.yellow);
            } else {
                panel.setBackground(table.getBackground());
            }
            return panel;
        }

        public Object getCellEditorValue() {
            return text1.getText();
        }

        @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            text1 = new JTextField(value.toString());
            
            return text1;
        }
    }

Obrigado

Bom já consigo seleccionar tanto o jbutton como os jtextfield

Fiz as seguintes alterações.

class TablEditor extends AbstractCellEditor implements TableCellEditor, TableCellRenderer {

        JPanel panel;
        JLabel label;
        JTextField text1;
        JTextField text2;
        JButton showButton;
        ArrayList<Teste> teste;

        public TablEditor(ArrayList<Teste> teste) {
            this.teste = teste;

            panel = new JPanel();
            text1 = new JTextField(10);
            text2 = new JTextField(10);
            label = new JLabel("Boa!!");
            showButton = new JButton("View Articles");
            showButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    System.out.println("skjfskljflsdjf");
                }
            });
            panel.setLayout(new FlowLayout(FlowLayout.LEFT));

            panel.add(text1);
            panel.add(text2);
            panel.add(label);
            panel.add(showButton);
        }
        Teste testes;

        private void updateData(Teste teste, boolean isSelected, JTable table) {
            this.testes = teste;

            text1.setText(teste.getName());
            text2.setText(teste.getTexto());
            
            if (isSelected) {
                panel.setBackground(table.getSelectionBackground());
            } else {
                panel.setBackground(table.getSelectionForeground());
            }
        }

        public Component getTableCellEditorComponent(JTable table, Object value,
                boolean isSelected, int row, int column) {
            Teste teste= testes.get(row);

            updateData(teste, true, table);
            return panel;
        }

        public Object getCellEditorValue() {
            Object ob;
                ob = text1.getText();
             
            
//            Object[] ob = new Object[2];
//            ob[0] = text1.getText();
//            ob[1] = text2.getText();
            
            return ob;
        }

        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            Teste teste= testes.get(row);

            updateData(teste, isSelected, table);
            return panel;

        }
    }

Agora o problema é que o setValueAt não está a ler o valor dos dois jtextfields

obrigado

Já está a funcionar, não sei se será a melhor solução, mas cá vai

alterei o getCellEditorValue()

        public Object getCellEditorValue() {
            Object[] ob = new Object[2];
            ob[0] = text1.getText();
            ob[1] = text2.getText();
            
            return ob;
        }

e setValueAt

    public void setValueAt(Object value, int row, int col) {
        Teste c = testes.get(row);

        Object[] o = (Object[]) value;

        c.setName(o[0].toString());
        c.setTexto(o[1].toString());

        fireTableDataChanged();
    }