JTextField na celula de um JTable só funciona com mouse

3 respostas
cleiton_herrmann

Olá pessoal...

Minha duvida é pq o componente q eu adiciono na celula de um JTable só aparece quando a celula está em estado de edicao, ou seja, quando eu clico nela o componente que é um JPainel com um JComboBox e um JButton, aparece e quando a celula perde o focus, o componente some, e fica sómente o valor selecionado no JComboBox.

Na verdade eu sei o pq, rsrsrs, mas eu quero saber se nao existe uma maneira de deixar esse JPainel com os 2 componetes dentro de uma celula da JTable sempre visivel e nao só quando eu clico na celula em questao.

Abaixo o codigo extraido de um forum, nao lembro qual, para inserir o JComboBox na JTable.

class MeuCellEditor extends AbstractCellEditor implements TableCellEditor {
    private MeuComponente editorComponent;
 
    public MeuCellEditor(MeuComponente comp) {
        this.editorComponent = comp;
    }
     
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        editorComponent.getCombo().setSelectedItem(value);
        return editorComponent;
    }
             
    public Object getCellEditorValue() {
        return editorComponent.getCombo().getSelectedItem();
    }
}
             
class MeuComponente extends JPanel {
    private JComboBox combo;
            
    public MeuComponente() {
        this.setLayout(new BorderLayout());
        this.add(combo = new JComboBox(), BorderLayout.CENTER);
        this.add(new JButton("O"), BorderLayout.EAST);
            
        combo.addItem("Teste1");
        combo.addItem("Teste2");
        combo.addItem("Teste3");
        combo.addItem("Teste4");
    }
         
    public JComboBox getCombo() {
        return combo;
    }
}

e na hora de definir o modelo da tabela eu uso o seguinte codigo pra dizer que em determinada celula será adicionado o JPainel com o JComboBox e o JButton.

tabela.getColumnModel().getColumn(0).setCellEditor(new MeuCellEditor(new MeuComponente()));

Desde já grato, t+

3 Respostas

ViniGodoy

Você está no caminho certo.

Mas, além do CellEditor, há também o CellRenderer.
O editor é para o modo de edição, o Renderer para o de exibição.

cleiton_herrmann

Ola vinigodoy

seguinte cara, na verdade eu nao to usando esse codigo que eu postei acima, eu apenas tomei ele de base para fazer o meu, no meu caso, eu estou inserindo um JTextField com os eventos keyPressed, keyTyped e focusLost ja definidos q fazem com q o usuario só consiga digitar 6 numeros e somente um ‘.’, e 2 numeros depois do ponto, enfim, umas doidera aqui.

Eu consegui inserir ele na celula, mas tem o problema que ele nao fica visivel sempre, isso vc ja falou…

o outro problema é q esse meu JTextField só é ativado se eu clicar com o mouse sobre a celula em questao, se eu usar as teclas ‘setas’ para chegar até a celula desejada e comecar a digitar, o JTextField nao é ativado, ele aparece mas nao é ativado, e td o que eu digito fica sobre ele, ai se eu clicar com o mouse sobre a celula o meu JTextField passa a funcionar.

Alguem sabe o pq? e como resolver isso, escrever diretamente no JTextField adicionado na celula sem precisar clicar com o mouse sobre a celula?

Desde ja grato !!!

cleiton_herrmann

Blz vinigodoy, consegui desenhar o componente na celula, agora ele fica sempre visivel, nao precisando clicar sobre a celula para o componente aparecer… vlw !!

o unico problema que me assombra agora é esse que para eu estar digitando no JTextField que eu coloquei na celula eu preciso clicar sobre a celula.

A unica coisa q ta faltando é funcionar com as teclas ‘setas’, tipo, chegar na celula e comecar a digitar e ja estar digitando no JTextField q foi adicionado na celula… nao vou postar meu codigo pq vai ficar muito grande… mais qq coisa tamo ai !!!

Se alguem souber como faz pra resolver esse problema… vlw t+

Criado 15 de agosto de 2007
Ultima resposta 16 de ago. de 2007
Respostas 3
Participantes 2