Como criar um metodo que chame uma outra janela e preencha o objeto desejado para atualizar

5 respostas
Jackye

Olá gente!

Preciso de um metodo que escolha salvar ou atualizar:

Na minha aplicação desktop eu faço o seguinte no botao salvar da janela que tem o formulario:

try { cadastrarLivro(new Livro()); } catch (Exception e) { JOptionPane.showMessageDialog(null, "Erro ao cadastrar! Causa: " + e); }

E eu preciso modificar esse código.

Sendo que quando for atualizar os dados o botão atualizar da janela 1 precisará chamar a janela de formulario com os campos preenchidos.
Como faço isso?

5 Respostas

Nicolas_Fernandes
A sua janela de edição deve conter dois construtores. Um vazio e outro que recebe um objeto.
public class FormularioEdicao extends JDialog {

    Entidade entidade;
    boolean edicao;
    public FormularioEdicao() {  
        edicao = false;
    }

    public FormularioEdicao(Entidade entidade) {
        edicao = true;
        this.entidade = entidade;
        preencherFormulario(entidade);
    }

    private void preencherFormulario(Entidade entidade) {
        // Preenche o formulário...
    }
}
Chama o formulário com construtor vazio quando quiser criar, e com o construtor que recebe a entidade quando for atualizar. Fique com Deus! :D
Jackye

Olá!

Para eu entender melhor,

vou mostrar as minhas telas de cadastro e pesquisa com comentários. (Anexo)

Este construtor vazio e outro cheio eu coloco em qual das duas? Na de cadastro/Atualização (É assim que chamo meu formulário)?

A propósito, é nesse botão salvar que tenho:

try { cadastrarLivro(new Livro()); } catch (Exception e) { JOptionPane.showMessageDialog(null, "Erro ao cadastrar! Causa: " + e); }

Preciso modificá-lo para que ele diferencie se estou fazendo um save ou um update. Tem como? :slight_smile:

Acha que isso é viável? Existe uma maneira mais fácil de se fazer isso?

Obrigada desde já! :thumbup:


Bertan

Ola,

Voce pode ver se o objeto que lhe foi passado tem o ID vazio ou nao.

Se o id for vazio, quer dizer que é um novo objeto e deve ser salvo, se o ID já existir, que dizer entao que é uma atualizacao.

Abaixo tem um exemplo que utilizei isso e funcionou perfeitamente:

// Save, insert or update
	public long save(Type type) {
		long id = type.getId();

		if (id != 0) {
			update(type);
		} else {
			// Insert a new one
			id = insert(type);
		}

		return id;
	}

	// Insert
	public long insert(Type type) {
		ContentValues values = new ContentValues();
		values.put(Types.NAME, type.getName());

		long id = insert(values);
		return id;
	}

	// Insert
	public long insert(ContentValues values) {
		long id = db.insert(TABLE_NAME, "", values);
		return id;
	}

	// Update with the _id
	public int update(Type type) {
		ContentValues values = new ContentValues();
		values.put(Types.NAME, type.getName());

		String _id = String.valueOf(type.getId());

		String where = Types._ID + "=?";
		String[] whereArgs = new String[] { _id };

		int count = update(values, where, whereArgs);

		return count;
	}

	// Update with the values
	// The "where" is for identify the _id
	public int update(ContentValues values, String where, String[] whereArgs) {
		int count = db.update(TABLE_NAME, values, where, whereArgs);
		Log.i(CATEGORY, "Update [" + count + "] registers.");
		return count;
	}
Nicolas_Fernandes
Jackye:
Este construtor vazio e outro cheio eu coloco em qual das duas? Na de cadastro/Atualização (É assim que chamo meu formulário)?
Exato. Na "cadastro/atualização", ou seja lá como você vai chamar essa classe.
Jackye:
A propósito, é nesse botão salvar que tenho:
try {    
                cadastrarLivro(new Livro());    
            } catch (Exception e) {    
                JOptionPane.showMessageDialog(null, "Erro ao cadastrar! Causa: " + e);    
            }
Preciso modificá-lo para que ele diferencie se estou fazendo um save ou um update. Tem como?

Acha que isso é viável? Existe uma maneira mais fácil de se fazer isso?


Bom, se eu não me engano, você está usando o Hibernate, né?
Se estiver, você pode fazer a chamada do método saveOrUpdate se sua Session. Assim, ele salva ou atualiza o seu objeto, não sendo necessário criar dois métodos diferentes para cada operação.

public class ServicosLivros {

    public salvarLivro(Livro livro) throws HibernateException {

        Session session = HibernateUtil.getSession();
        session.saveOrUpdate(livro);
        session.close();
    }
}

//Ao salvar...
try {    
    ServicosLivros servicosLivros = new ServicosLivros();
    servicosLivros.salvarLivro(livro);
}
catch (HibernateException hibernateException) {
    hibernateException.printStackTrace();
}
catch (Exception generalException) {
    generalException.printStackTrace();
}
Caso não esteja, siga a ideia do nosso amigo Bertan: verifique se o objeto passado contém o ID preenchido. Se sim, você atualiza. Caso contrário, você insere.
public class ServicosLivros {

    public salvarLivro(Livro livro) throws SQLException {

        if (livro.getID() != 0)
            atualizarLivro(livro);
        else
            inserirLivro(livro);
    }

    private void atualizarLivro(Livro livro) throws SQLException {
        // Código para UPDATE...
    }
    private void inserirLivro(Livro livro) throws SQLException {
        // Código para INSERT...
    }
}

//No botão, segue o mesmo princípio acima.

Espero ter ajudado,
fique com Deus! :D

Jackye

Olá.
Agora mudei novamente de estratégia.
Achei mais fácil: criar outra janela com todos os campos do objeto e com funções de apenas atualizar.

A dúvida que ainda persiste é:
Como fazer de um Frame 1 que lista todos os objeto, quando um objeto for selecionado e o usuário quiser atualizar
chamar o Frame 2 com todos os campos preenchidos do objeto escolhido?

Desde já agradeço a atenção.
:thumbup:

Criado 8 de março de 2012
Ultima resposta 12 de mar. de 2012
Respostas 5
Participantes 3