Para a rapaziada ‘javalesca’ que aprendeu a usar vinculação de beans com formulários e tables( o que é uma maravilha ) asism como eu, creio que já tenham passado pelo problema a seguir:
- Tenho um bean com anotaçoes JPA( tanto para EclipseLink quanto para Hibernate):
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
@Entity
@Table(name = "CONTAS")
public class Contas implements Serializable {
@Transient
private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(generator="system-uuid")
@Basic(optional = false)
@Column(name = "ID")
private String id;
@Column(name = "DESCR")
private String descr;
// @Max(value=?) @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
@Column(name = "VAL_JAN")
private BigDecimal valJan;
@Column(name = "VAL_FEV")
private BigDecimal valFev;
@Column(name = "VAL_MAR")
private BigDecimal valMar;
public Contas() {
}
public Contas(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
String oldId = this.id;
this.id = id;
changeSupport.firePropertyChange("id", oldId, id);
}
public String getDescr() {
return descr;
}
public void setDescr(String descr) {
String oldDescr = this.descr;
this.descr = descr;
changeSupport.firePropertyChange("descr", oldDescr, descr);
}
public BigDecimal getValJan() {
return valJan;
}
public void setValJan(BigDecimal valJan) {
BigDecimal oldValJan = this.valJan;
this.valJan = valJan;
changeSupport.firePropertyChange("valJan", oldValJan, valJan);
}
public void setValJan(String valJan) {
BigDecimal oldValJan = this.valJan;
this.valJan = (BigDecimal)f.parse(valJan);
changeSupport.firePropertyChange("valJan", oldValJan, valJan);
}
public BigDecimal getValFev() {
return valFev;
}
public void setValFev(BigDecimal valFev) {
BigDecimal oldValFev = this.valFev;
this.valFev = valFev;
changeSupport.firePropertyChange("valFev", oldValFev, valFev);
}
public BigDecimal getValMar() {
return valMar;
}
public void setValMar(BigDecimal valMar) {
BigDecimal oldValMar = this.valMar;
this.valMar = valMar;
changeSupport.firePropertyChange("valMar", oldValMar, valMar);
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Contas)) {
return false;
}
Contas other = (Contas) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return id + "";
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
changeSupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
changeSupport.removePropertyChangeListener(listener);
}
}
- Em algum momento do código do Formulário recupero uma list de contas e pelo netbeans realizei todo o vinculo do list com uma jTable…como consta na imagem abaixo de exemplo:
Agora a view em execução:
A somatória dos valores das linhas de Jan a Dez é fácil, no caso a expressão de vinculação fica ${valJan + valFev +valMar+valAbr+valMai+valJun+valJul+valAgo+valSet+valOut+valNov+valDez}
3 e dúvida cruel: Como criar mais uma linha neste JTable fazendo o Somatório Mensal de cada MES… sendo que cada linha é um bean vinculado?
Já pensei muito, mas até agora nada…
Luz?
Agradeço desde já.