JTable - Regra para Coluna aceitar somente valores númericos Tipo float [SOLUCIONADO]

3 respostas
CLEYSON

Boa Noite Companheiros ..

To precisando de uma ajuda pra criar uma Regra num Jtable ...
Regra: A coluna "Qtde" deve receber somente números e/ou vírgula/ponto

Essa célula vai tratar com campos tipo float ...

String colunaNome[] = {"Codigo", "Descrição", "UN","Qtde"};
public boolean [] edicao = {false, true};
ModelTable modeloMaterial = new ModelTable(new ArrayList(), colunaNome, edicao);
public JTable jTModular = new JTable(modeloMaterial);

...

public class ModelTable extends AbstractTableModel {

...
}
    

//Evento de Tecla
        jTModular.addKeyListener(new java.awt.event.KeyAdapter(){
            public void keyTyped(KeyEvent e){
            
            }
            public void keyPressed(KeyEvent e) {
             
            }
            public void keyReleased(KeyEvent e) { 
                //Tratativa na Coluna Qtde
                if (jTModular.getSelectedColumn() == jTModular.getColumnModel().getColumnIndex("Qtde")){
                    //Tratamento das Teclas
                    if ((e.getKeyChar() == e.VK_0)|| (e.getKeyChar() == e.VK_1)|| (e.getKeyChar() == e.VK_2)   
                        || (e.getKeyChar() == e.VK_3)|| (e.getKeyChar() == e.VK_4)|| (e.getKeyChar() == e.VK_5)|| (e.getKeyChar() == e.VK_6)|| (e.getKeyChar() == e.VK_7)   
                        || (e.getKeyChar() == e.VK_8)|| (e.getKeyChar() == e.VK_9)){
                    
                    } else {   
                        e.consume();   
                    }  
                
                    }
            }
        });

Alguém tem uma idéia?

Desde já agradeço !

3 Respostas

U

Bom Dia Tchê…

Na empresa na qual eu trabalho estavamos com este mesmo problema e com outros do tipo abrir uma seleção de data, uma combo dentro de uma tabela entre outros objetos. Descobrimos uma suite de componentes que nos ajudou neste projeto sem precisar programar muito.

    A suite de componentes é a openswing, http://oswing.sourceforge.net/, que tem bastante coisa para ajudar no desenvolvimento de aplicações swing e principalmente é free com atualizações frequentes.

Espero ter ajudado.
Ulisses

lina

Oi,

Acho que da pra fazer algo do tipo:

TableColumn col = tabela.getColumnModel().getColumn(1);
col.setCellEditor(new MyTableCellEditor());

class MyTableCellEditor extends AbstractCellEditor
  implements TableCellEditor{
  JComponent component = new JTextField();
  
  public boolean stopCellEditing(){
    String s = (String)getCellEditorValue();
    boolean valido = true;
    
    for(int i = 0; i < s.length(); i++){
      Character caractere = s.charAt(i);
      if(!Character.isDigit(caractere)){
        valido = false;
        break;
      }
    }    

    if(!valido){
      JOptionPane.showMessageDialog(null, 
         "Valor inválido");
      return false; 
    }
    return super.stopCellEditing();
  }
  
  public Component getTableCellEditorComponent(
    JTable table, Object value,
    boolean isSelected, int rowIndex, int vColIndex){
    
    if(isSelected){
      //
    }
    
    ((JTextField)component).setText((String)value);
    
    return component;
  }

  
  public Object getCellEditorValue() {
    return ((JTextField)component).getText();
  }
}

O código acima, permite apenas números inteiros na celula escolhida. Você pode adapta-lo para sua ideia.

Tchauzin!

CLEYSON

Bom Dia Companheiros …

Obrigado pelo tempo dedicado as respostas

Estarei testando as sugestões de ambos, tava quebrando a cabeça com esses detalhes no meu projeto …

Muito Obrigado, ulissesnairne e lina :stuck_out_tongue:

Criado 30 de julho de 2009
Ultima resposta 31 de jul. de 2009
Respostas 3
Participantes 3