[quote=t_java]Tente implentar o cálculo no TableModel:
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
/**
*
*/
public class ModeloNota extends AbstractTableModel {
private ArrayList dados;
private String[] colunas = {"Nota 1","Nota 2","Nota 3","Média"};
public ModeloNota() {
super();
dados = new ArrayList();
for (int i=0; i < 45; i++){
dados.add(new LinhaNota(0,0,0,0));
}
}
@Override
public int getRowCount() {
return dados.size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
LinhaNota linha = (LinhaNota) dados.get(rowIndex);
double retorno = 0;
switch (columnIndex) {
case 0:
retorno = linha.getNota1();
break;
case 1:
retorno = linha.getNota2();
break;
case 2:
retorno = linha.getNota3();
break;
case 3:
retorno = linha.getMedia();
break;
}
if (retorno == 0) {
return "";
} else {
return Calculo.formatarNumero(retorno);
}
}
@Override
public String getColumnName(int column) {
return colunas[column];
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 3) {
return false;
} else {
return true;
}
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
if (!Calculo.numeroValido(aValue.toString())) {
return;
}
LinhaNota linha = (LinhaNota) dados.get(rowIndex);
double valor = 0;
valor = Calculo.converterNumero(aValue.toString());
switch (columnIndex) {
case 0:
linha.setNota1(valor);
break;
case 1:
linha.setNota2(valor);
break;
case 2:
linha.setNota3(valor);
break;
}
valor = 0;
valor = Calculo.calcularMedia(linha.getNota1(), linha.getNota2(), linha.getNota3());
linha.setMedia(valor);
fireTableDataChanged();
}
}
public class LinhaNota {
private double nota1;
private double nota2;
private double nota3;
private double media;
public LinhaNota(double nota1, double nota2, double nota3, double media) {
this.nota1 = nota1;
this.nota2 = nota2;
this.nota3 = nota3;
this.media = media;
}
/**
* @return the nota1
*/
public double getNota1() {
return nota1;
}
/**
* @param nota1 the nota1 to set
*/
public void setNota1(double nota1) {
this.nota1 = nota1;
}
/**
* @return the nota2
*/
public double getNota2() {
return nota2;
}
/**
* @param nota2 the nota2 to set
*/
public void setNota2(double nota2) {
this.nota2 = nota2;
}
/**
* @return the nota3
*/
public double getNota3() {
return nota3;
}
/**
* @param nota3 the nota3 to set
*/
public void setNota3(double nota3) {
this.nota3 = nota3;
}
/**
* @return the media
*/
public double getMedia() {
return media;
}
/**
* @param media the media to set
*/
public void setMedia(double media) {
this.media = media;
}
}
E implementar os cálculos em uma classe separada:
import java.text.DecimalFormat;
/**
*
*/
public class Calculo {
public static boolean numeroValido(String texto) {
boolean retorno = false;
double valor = 0;
if (texto.equals("")) {
texto = "0";
}
try {
valor = Double.parseDouble(texto.replace(',', '.'));
if ((valor >= 0) && (valor <= 10)) {
retorno = true;
} else {
retorno = false;
}
} catch (Exception e) {
retorno = false;
}
return retorno;
}
public static double converterNumero(String texto) {
double retorno = 0;
try {
retorno = Double.parseDouble(texto.replace(',', '.'));
} catch (Exception e) {
retorno = 0;
}
return retorno;
}
public static String formatarNumero(double valor) {
String retorno = "";
DecimalFormat formatter;
try {
formatter = new DecimalFormat("#0.00");
retorno = formatter.format(valor);
} catch (Exception e) {
retorno = "";
e.printStackTrace();
}
return retorno;
}
public static double calcularMedia(double nota1, double nota2, double nota3) {
double retorno = 0;
int qtde = 0;
if (nota1 > 0) {
retorno += nota1;
qtde += 1;
}
if (nota2 > 0) {
retorno += nota2;
qtde += 1;
}
if (nota3 > 0) {
retorno += nota3;
qtde += 1;
}
if (qtde > 0) {
retorno = retorno / qtde;
} else {
retorno = 0;
}
return retorno;
}
}
[/quote]
Aí cara, vlw muito obrigado! Vou testar aqui, e depois respondo, mas antemão muito obrigado msm! ah outra pergunta eu posso implementar esse código em JFrame, pré-criado pelo net benas, tipo instanciar ele para um JFrame(da paleta netbeans)?