Salve galera.
Adicionei um TableCellEditor para criar um JTextField na JTable para valores de uma classe que uso em meus projetos, esta funcionando, mas eu preciso de mais algumas coisas.
1 - Ao dar um “Enter” na coluna onde esta o JTextField seja aberto a edicao sem precisar clicar com o mouse.
2 - Depois de inserir o valor R$ e teclar o “Enter” novamente seja dado o setValueAt(column) e o foco seja dado na proxima coluna para inserir novos valores.
3 - Tenho um JTextField com o label “Total”, quero ir calculando os valores inseridos apos o item2 ser executado e ir exibindo as somas dos valores nesse JTextField.
aqui como fiz
// meu Bean(POJO)
public class TipoPagto {
private Long idPagto;
private String tipo;
private BigDecimal valor;
//sets e gets
//aqui meu TableModel
public class TipoPagtoTableModel extends AbstractTableModel{
private List<TipoPagto> listaTipoPagto;
private String[] colunas = {"Id","Tipo Pagto.","Valor(R$)"};
public TipoPagtoTableModel(){
this.listaTipoPagto = new ArrayList<TipoPagto>();
}
public TipoPagtoTableModel(List<TipoPagto> lista){
this();
this.listaTipoPagto.addAll(lista);
}
@Override
public int getRowCount() {
return this.listaTipoPagto.size();
}
@Override
public int getColumnCount() {
return this.colunas.length;
}
public String getColumnName(int column){
//nome da coluna
if(colunas[column] == "Id"){
return "Id";
}else if(colunas[column] == "Tipo Pagto."){
return "Tipo Pagto.";
}else if(colunas[column] == "Valor(R$)"){
return "Valor(R$)";
}
return new String();
}
public Class getColumnClass(int column){
if(colunas[column] == "Id"){
return String.class;
}else if(colunas[column] == "Tipo Pagto."){
return String.class;
}else if(colunas[column] == "Valor(R$)"){
return BigDecimal.class;
}
return String.class;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
TipoPagto tp = this.listaTipoPagto.get(rowIndex);
switch(columnIndex){
case 0: return new FormataCodigos().retornaCodigoFormatado(tp.getIdPagto());
case 1: return tp.getTipo();
case 2: return tp.getValor();
default: return new String();
}
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
listaTipoPagto.get(rowIndex).setValor(new BigDecimal(aValue.toString()));
fireTableRowsUpdated(rowIndex, columnIndex);
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
if(columnIndex == 2){
return true;
}else{
return false;
}
}
public Boolean deleteAll(){
this.listaTipoPagto.clear();
fireTableDataChanged();
return true;
}
public boolean removeRow(int line){
this.listaTipoPagto.remove(line);
fireTableDataChanged();
return true;
}
}
//aqui meu TableCellEditor
public class TipoPagtoTableCellEditor extends AbstractCellEditor implements TableCellEditor {
private JTextField txtField;
public TipoPagtoTableCellEditor(){
txtField = new JMoneyField(15);
}
@Override
public Object getCellEditorValue() {
return txtField.getText();
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
return txtField;
}
}
//aqui como uso no JFrame
public void getTiposPagamento(){
List<TipoPagto> lista = new TipoPagtoDAO().getFormaPagto();
model = new TipoPagtoTableModel(lista);
tabelaTipoPagto.setModel(model);
TableColumn col = tabelaTipoPagto.getColumnModel().getColumn(2);
col.setCellEditor(new TipoPagtoTableCellEditor());
}
Como fazer isso ?