Olá pessoal,
Sou novo no forum e preciso muito de ajuda. Estou constuindo um sistema cuja função principal é de apurar em dias, um determinado período (data início e data fim) convertendo-os em anos, meses e dias,
bem como apurar a data início ou fim de um período, tendo como base uma data (início/fim) e a quantidade de dias. Estou utilizando o keyPressed para pegar os dados da jTable porem só consigo pegar os valores na primeira vez que digito os valores na celula, se eu alterar esse valor de novo as conversoes nao ocorre. Não sei se fui bem claro, mas alguem pode me ajudar?
Pegar e atualizar valores de uma jTable
U
2 Respostas
T
Tente desta forma, centralize os cálculos em uma classe:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Calculos {
public static Date converterData(String data) {
Date retorno = null;
try {
DateFormat formatter;
formatter = new SimpleDateFormat("dd/MM/yyyy");
retorno = (Date)formatter.parse(data);
} catch (ParseException e) {
System.out.println("Exception :"+e);
}
return retorno;
}
public static long calcularPeriodo(String inicio, String fim) {
long retorno = 0;
Date dinicio, dfim;
dinicio = converterData(inicio);
if (dinicio == null) {
return retorno;
}
dfim = converterData(fim);
if (dfim == null) {
return retorno;
}
long linicio = 0, lfim = 0;
Calendar cinicio, cfim;
cinicio = Calendar.getInstance();
cinicio.setTime(dinicio);
linicio = cinicio.getTimeInMillis();
cfim = Calendar.getInstance();
cfim.setTime(dfim);
lfim = cfim.getTimeInMillis();
retorno = (lfim - linicio) /(1000 * 60 * 60 * 24);
return retorno;
}
}
Ao invés de tratar o evento keyPressed, tente utilizar o cálculo através do TableModel:
public class LinhaModelo {
private String datainicio;
private String datafim;
private long qtdedias;
public LinhaModelo(String datainicio, String datafim, long qtdedias) {
this.datainicio = datainicio;
this.datafim = datafim;
this.qtdedias = qtdedias;
}
/**
* @return the datainicio
*/
public String getDatainicio() {
return datainicio;
}
/**
* @param datainicio the datainicio to set
*/
public void setDatainicio(String datainicio) {
this.datainicio = datainicio;
}
/**
* @return the datafim
*/
public String getDatafim() {
return datafim;
}
/**
* @param datafim the datafim to set
*/
public void setDatafim(String datafim) {
this.datafim = datafim;
}
/**
* @return the qtdedias
*/
public long getQtdedias() {
return qtdedias;
}
/**
* @param qtdedias the qtdedias to set
*/
public void setQtdedias(long qtdedias) {
this.qtdedias = qtdedias;
}
}
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
public class ModeloCalculo extends AbstractTableModel{
private ArrayList dados;
private String[] colunas = {"Inicio", "Fim", "Qtde de dias"};
public ModeloCalculo() {
super();
dados = new ArrayList();
for (int i=0; i< 10; i++) {
dados.add(new LinhaModelo("","",0));
}
}
@Override
public int getRowCount() {
return dados.size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
LinhaModelo linha = (LinhaModelo) dados.get(rowIndex);
switch (columnIndex){
case 0:
return linha.getDatainicio();
case 1:
return linha.getDatafim();
case 2:
return linha.getQtdedias();
}
return null;
}
@Override
public String getColumnName(int column) {
return colunas[column];
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex < 2) {
return true;
} else {
return false;
}
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
LinhaModelo linha = (LinhaModelo) dados.get(rowIndex);
switch (columnIndex) {
case 0:
linha.setDatainicio(aValue.toString());
break;
case 1:
linha.setDatafim(aValue.toString());
break;
}
long retorno = 0;
retorno = Calculos.calcularPeriodo(linha.getDatainicio(), linha.getDatafim());
linha.setQtdedias(retorno);
}
}
Depois no seu frame:
private ModeloCalculo modelo;
public Janela() {
modelo = new ModeloCalculo();
tabela.setModel(modelo);
}

U
Obrigado me ajudou bastante.
E me responde outra coisa vc conhece algum método que eu possa usar para inibir a linha seguinte da table enquanto a anterior nao estiver completa e após isso adicionar mais uma linha?
Criado 11 de outubro de 2011
Ultima resposta 17 de out. de 2011
Respostas 2
Participantes 2