Como editar célula com clique duplo?

2 respostas
T

Olá amigos,

Após eu aplicar um cell editor na minha jtable, para aceitar somente números inteiros em algumas colunas, as células entram no modo de edição(aparece o cursos dentro) com apenas um clique do mouse.

Eu gostaria de saber como eu poderia arrumar isso para voltar do jeito default, onde para editar uma célula o usuário tem que clicar duas vezes para aparecer o cursor dentro da mesma.

Abração!

2 Respostas

Ironlynx

Thobarux, a mudança no células não deveria ter influência direta no mouse.Como está seu MouseListener na sua JTable?Algo do tipo:

suaJTable.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ if (e.getClickCount() == 2) { // ...faz oquevc quer } } }
Certo?Posta o código que vc tá usando com seu TableCellEditor(se não me engano o LAF por default de TableCellEditor só reage a um clique, não dois para edição).

T

olá Ironlynx !

não estou usando mouseListener na tabela, no início do código eu “seto” a tabela assim:

// ************ faz a tecla ENTER se comportar como a tecla TAB
        tabelaPecas.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).
                put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false), "selectNextColumnCell");

        // permite parar e tirar a seleção de uma célula quando clicar em
        // qualquer outro componente da janela
        tabelaPecas.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);

        // ******* permite mudar para a próxima célula depois de editar a corrente
        tabelaPecas.setSurrendersFocusOnKeystroke(true);

segue o código do meu cellEditor

public class FiltroInteirosJTable extends AbstractCellEditor implements TableCellEditor
   {
        // This is the component that will handle the editing of the cell value
        JComponent campo = new JTextField();


        public FiltroInteirosJTable(JanelaCadastrarProjetos jan)
        {
            this.jan = jan;
        }

        // This method is called when a cell value is edited by the user.
        public Component getTableCellEditorComponent(final JTable table, Object value,
                boolean isSelected, int rowIndex, int vColIndex)
        {

            // Configure the component with the specified value
            ((JTextField)campo).setText((String)value);


             ((JTextField)campo).addKeyListener(new KeyListener()
                {

                    public void keyTyped(KeyEvent e)
                    {
                        char c = e.getKeyChar();

                        String valor = ((JTextField)campo).getText();

                        if(!Character.isDigit(c) || valor.length() > 6)
                            e.consume();
                        else // o dígito é aceito
                            jan.pecasAlteradas();
                    }

                    public void keyPressed(KeyEvent e)
                    {
                    }

                    public void keyReleased(KeyEvent e)
                    {
                    }
                }
             );


            // Return the configured component
            return campo;
        }


        // This method is called when editing is completed.
        // It must return the new value to be stored in the cell.
        public Object getCellEditorValue()
        {
            String conteudo = ((JTextField)campo).getText();

            conteudo = conteudo.trim();

            try
            {
                Integer.parseInt(conteudo);
            }
            catch (Exception e)
            {
                if(!conteudo.isEmpty())
                    JOptionPane.showMessageDialog(null, "Insira apenas números Inteiros (máx. 7 digitos).");

                conteudo = "";
                
            }


            return conteudo;
        }



        private JanelaCadastrarProjetos jan;


    }
Criado 11 de outubro de 2009
Ultima resposta 12 de out. de 2009
Respostas 2
Participantes 2