Boa dia, estou com um trabalho de faculdade pra fazer, mas estou com uma certa dificuldade com uma parte do trabalho.
É um simples controle de tarefas, onde o usuário cadastra uma tarefa com uma prioridade e uma descrição, em seguida, ele adiciona os “itens de tarefa” com um percentual e descrição na “tarefa”.
Quando o item de tarefa é concluido, a soma do percentual da tarefa deve ser atualizado. Esse é o problema.
A conclusão é feita quando uma data é setada para o item de tarefa, antes ou depois de ser adicionado a tarefa.
O problema é que eu não sei como referenciar a tarefa quando eu for chamar o método “concluir”, e se eu somente chamar tarefa.atualizaStatus(); ele da um NullPointerException. Alguém pode me ajudar? Eu preciso atualizar a tarefa depois que o método concluir for chamado.
Segue o meu fonte:
Classe Tarefa
package aula.java.poo;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Tarefa {
private double prioridade;
private String nome;
private Date dataLimite;
private double percentual = 0.0;
private String detalhamento;
private StatusTarefa status;
private List<ItemTarefa> itens = new ArrayList<ItemTarefa>(); //Lista de itens de tarefas
//Construtor da classe
public Tarefa(double prioridade, String nome){
this.prioridade = prioridade;
this.nome = nome;
this.status = status.PENDENTE;
}
//Adiciona um novo item a tarefa
public void adicionaItem(ItemTarefa item){
this.itens.add(item);
item.setTarefa(this);
if(item.getDataExecucao() != null)
atualizaStatus();
}
//Atualiza o status da tarefa
public void atualizaStatus(){
percentual = 0.0;
for(ItemTarefa it : itens){
if(it.getDataExecucao() != null){
percentual += it.getPercentual();
}
}
}
public double getPercentual() {
return percentual / itens.size();
}
//M�todo toString sobrescrito de acordo com o pedido
@Override
public String toString() {
super.toString();
return prioridade+" - "+nome;
}
//Getters e Setters
public List<ItemTarefa> listaItens(){
return itens;
}
public List<ItemTarefa> getItens() {
return itens;
}
public Date getDataLimite() {
return dataLimite;
}
public void setDataLimite(Date dataLimite) {
this.dataLimite = dataLimite;
}
public String getDetalhamento() {
return detalhamento;
}
public void setDetalhamento(String detalhamento) {
this.detalhamento = detalhamento;
}
public double getPrioridade() {
return prioridade;
}
public String getNome() {
return nome;
}
public StatusTarefa getStatus() {
return status;
}
}
Classe Item de Tarefa
package aula.java.poo;
public class ItemTarefa {
private double percentual;
private String descricao;
private String dataExecucao;
private Tarefa tarefa;
public ItemTarefa(double percentual, String descricao){
this.percentual = percentual;
this.descricao = descricao;
}
//Conclui a tarefa e atualiza o status
public void concluir(String data){
dataExecucao = data;
tarefa.atualizaStatus();
}
@Override
public String toString() {
super.toString();
return "["+percentual+"]"+" "+descricao;
}
//Getters e Setters
public void setTarefa(Tarefa tarefa) {
this.tarefa = tarefa;
}
public double getPercentual() {
return percentual;
}
public void setPercentual(double percentual) {
this.percentual = percentual;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getDataExecucao() {
return dataExecucao;
}
}
Classe Status Tarefa
package aula.java.poo;
enum StatusTarefa {
CONCLUIDA, PENDENTE
}
Classe Principal:
package aula.java.poo;
public class Testa {
public static void main(String[] args) {
Tarefa tarefa = new Tarefa(1.0, "Fazer compras");
ItemTarefa item1 = new ItemTarefa(100, "Comprar arroz");
ItemTarefa item2 = new ItemTarefa(50, "Comprar feijão");
item1.concluir("20/09/2012");
tarefa.adicionaItem(item1);
tarefa.adicionaItem(item2);
item2.concluir("01/01/2001");
}
}