Então galera estou desenvolvendo um programa mais para estudos mesmo, pois surgiu uma oportunidade de emprego na área e preciso estar programando moderadamente.
O que estou fazendo é o seguinte… quando a pessoa clica no botão da 1ª lupa, abre uma listagem de todos os cadastros de cliente… ai ele seleciona e passa para este frame da imagem corretamente, porém se eu clicar na 2ª lupa e selecionar um serviço os dados que que eu peguei quando selecionei um cliente na 1 lupa somem… e os dados da segunda aparecem corretamente.
Até consegui fazer o seguinte, selecionei um cliente depois cliquei na lupa para selecionar um serviço, e funcionou perfeitamente pegando os 2 ( Serviço e Cliente ) porém só funciona se primeiro eu selecionar um cliente, se eu começar pela lupa de selecionar serviço não consigo mandar nada para o frame da imagem…
Alguém consegue me ajudar?
[code]/*
To change this template, choose Tools | Templates
and open the template in the editor.
*/
package View;
@author Michetti /
public class NovoAgendamento extends javax.swing.JFrame {
String dia;
private static Serviços sr;//declarando
private static Cliente cli;
public boolean teste;
/*
Creates new form NovoAgendamento
*/
public NovoAgendamento(Serviços sr, Cliente cli) {
this.sr = sr;
this.cli = cli;
initComponents();
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
this.setVisible(false);
new BuscarCliente(){}.show();
// TODO add your handling code here:
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
this.setVisible(false);
new BuscarServicos(sr,cli){}.show();
// TODO add your handling code here:
}
public void pega(){
Cara não trabalho com swing, mas olhando as classes …
NovoAgendamento possui os atributos Serviços e Cliente.
Não sei se é a melhor opção, também não sei se ficará claro…
1º BuscaClientes(this) passe seu Jframe como referencia, no form de buscar clientes basta chamar o método setCliente(cliente) do seu NovoAgendamento, para assim passar o cliente pro form de agendamento.
Dicas menos importantes
Jamais use “ç” em nome de Classes/Variáveis/Pacotes…
Pela convenção nome de pacotes são com todas letras em minusculas.
Fiz um exemplo sem usar swing, só pra mostrar o conceito. Coloque todas as classes na raiz da pasta src e xecute a main da classe NovoAgendamento.
O que nosso colega falou esta correto, de alguma forma você deve passar referência ao seu JFrame NovoAgendamento, você pode adicionar o this como parâmetro para Clientes e Serviços ou, você pode fazer o NovoAgendamento juntamente destes métodos como static assim você poderá sempre acessar a mesma instância da sua tela.
Outra coisa, não é muito comum em swing utilizar mais de um JFrame na mesma aplicação, normalmente utiliza-se 1 JFrame como a tela principal e as suas filhas são JDialogs, mas na prática isso não impacta em nada na sua aplicação.
A dica que você me passou por MP resolveu um pouco mas deu tipo esse bug que eu citei de começar pelo cliente depois por serviço…
Agora vou dar uma estudada nos arquivos que você passou e tentar resolver meu problema, caso contrário vou tentar usar JDialogs para ver se resolve.
Assim que chegar do serviço colocarei em prática!!
Os exemplos que você postou, pelo menos eu não consegui colocar para funcionar… pois toda vez que eu pego as informações do get da classe NovoAgendamento, pelo getCli().getNome() vem tudo em branco, e na hora de setar os valores funciona, pois eu ponho para mostrar no JOptionPane e mostra examente o que foi passado. O que pode ser?
@edit
Consegui resolver esta questão do não passar nada…
Porém se eu começar pelo “BuscarServiço” quando seleciono uma linha do jTable e dou o duplo clique, não vai para o outro frame… e começando pelo “BuscarCliente” selecionar o cliente e depois ir para o “BuscarServiço” e selecionar um, funciona normal… o que sera ta esta acontecendo ?
@EDIT 2
Creio que sei porque esta acontecendo isto…
Quando executo da nullPointerExecpetion, porém se eu inicializar a variavel vai dar problema pois na hora que eu chamar esta classe sempre vai zerar os valores… tem outra solução ?
[code]/*
To change this template, choose Tools | Templates
and open the template in the editor.
*/
package View;
@author Michetti /
public class BuscarServicos extends javax.swing.JFrame {
int pos;
DefaultTableModel modelo = null;
static Agendamento ag;
// private static Serviços sr;//declarando
// private static Cliente cli;
/*
Creates new form BuscarCliente
*/
public BuscarServicos(Agendamento ag) {
JOptionPane.showMessageDialog(null, ag);
this.ag = ag;
// this.sr = sr;
// this.cli = cli;
initComponents();
}
/**
This method is called from within the constructor to initialize the form.
WARNING: Do NOT modify this code. The content of this method is always
regenerated by the Form Editor.
*/ @SuppressWarnings(“unchecked”)
//
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jRadioButton1 = new javax.swing.JRadioButton();
jRadioButton2 = new javax.swing.JRadioButton();
jRadioButton3 = new javax.swing.JRadioButton();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
@param args the command line arguments /
public static void main(String args[]) {
/ Set the Nimbus look and feel /
//
/ If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
this.setVisible(false);
new BuscarCliente(){}.show();
// TODO add your handling code here:
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
this.setVisible(false);
new BuscarServicos(sr,cli){}.show();
// TODO add your handling code here:
}
Nesse código acima exibe os forms de busca, dá um setVisible(false) no NovoAgendamento, então o objeto ainda existe apenas não está visível.
Até então sem problema.
Porém nos teus forms de busca não repassa as informações para o NovoAgendamento que está oculto, ao invés disso você cria um novo.
Mas para chamar o outro frame eu tenho que criar um objeto do tipo NovoAgendamento certo?
Como que vou chamar a outra frame que esta oculta sem criar um objeto?