Não sei nem como pesquisar por isso então resolvi pedir uma ajuda.
Veja o código abaixo.
StringtempPB="";JTextFieldmedPB=newJTextField();ativaCampo(medPB,tempPB);//funcao que deixa o campo JtextField ser editadopublicvoidativaCampo(JTextFieldcampo,Stringtexto){campo.setEditable(true);campo.setText(texto);}//Estou enviando o JTextField para ser desativado e estou enviando o conteudo de tempPBdesativaCampo(medPB,tempPB);//AGORA vem o problema!!!!!!!!//Funcao que desativa um JTextField e guarda o valor dele numa variavel temporaria (tempPB)publicvoiddesativaCampo(JTextFieldcampo,/*Aqui eu receberia o conteudo do medPB, mas eu quero algo como ponteiro para ele*/){campo.setEditable(false);//desativei o JTextFieldvar= campo.getText();//COMO FAÇO PARA ARMAZENAR O TEXTO DO CAMPO JTextField NA VARIAVEL ENVIADA PELO METODO DA LINHA 14?campo.setText("");//Fingi que apaguei o texto do JTextField, mas ele estaria guardado na variavel enviada pelo metodo da linha 14}
como eu envio uma variavel pra um metodo e faço esse metodo modificar essa variavel?
Java não tem passagem de parâmetros por referência (aquilo que é conhecido no C# como “ref”). Ponto.
VictorMatuk
Nem um método de fazer isso?
Talvez recebendo algo tipo Object var? Sei lá
ViniGodoy
No java só existe passagem por valor.
Porém, toda variável que aponta para um objeto é, na verdade, uma referência. E, quando você passa ela de uma função para outra, você está fazendo apenas a cópia do valor da referência. Ambas as cópias apontam para o mesmo objeto.
Portanto, os seus métodos, do jeito que você mesmo descreveu, funcionam.
jyoshiriro
Amigo, nesse acreito que basta substituir String por StringBuffer. Assim você pode alterar o conteúdo da “String” dentro do objeto sem fazer que com ele ganhe outra referência.
VictorMatuk
Amigo, nesse acreito que basta substituir String por StringBuffer. Assim você pode alterar o conteúdo da “String” dentro do objeto sem fazer que com ele ganhe outra referência.
Opa vou testar.
ViniGodoy
O estranho é que o Java não tem, mas não faz falta.
Provavelmente existe uma maneira diferente e melhor de fazer o que você quer fazer, sem recorrer a referências.
VictorMatuk
Amigo, nesse acreito que basta substituir String por StringBuffer. Assim você pode alterar o conteúdo da “String” dentro do objeto sem fazer que com ele ganhe outra referência.
Opa vou testar.
Funcionou.
Fiz da sequinte maneira. (Este é o código só por alto)
privateJTextFieldmedCor;privateStringBuffermedTeste=newStringBuffer();desativaCampo(medCor,medTeste);//enviei o JTextField e o StringBufferpublicvoiddesativaCampo(JTextFieldcampo,StringBuffertexto){//recebi né =pcampo.setEditable(false);//desativei o JTextFieldtexto.append(campo.getText());//Dei append no StringBuffer pra guardar esse valor pois quando desativo o JTextField e o ativo depois, ele vem com o conteudo apagado. Fiz isso pra caso o cliente ative esse JTextField de novo, ele volte com os valores digitados anteriormentecampo.setText("");//Fingi que apaguei o texto}
VictorMatuk
ViniGodoy:
O estranho é que o Java não tem, mas não faz falta.
Provavelmente existe uma maneira diferente e melhor de fazer o que você quer fazer, sem recorrer a referências.
Se tiver algo escrito num JTextField e eu vo lá e faço um JTextField.setEditable(false). Eu faço esse JTextField perder seu conteudo (Pois quero enviar tudo da JFrame num SQL e se tiver o conteudo lá com o JTextField desativado, ele envia assim msm, entao eu tenho que apagar) e se eu quiser ativar esse JTextField por algum motivo num futuro eu vou precisar digitar de novo.
Entao fiz um metodo que guardasse o valor do JTextField numa variavel Temporaria quando o mesmo fosse desativado. E caso ele voltasse a ser ativado, o JTextField dava JTextField.setText(variavelTemporaria)
Preciso desse metodo pois sao mtos JTextFields!
E
entanglement
No seu caso em particular, seria melhor retornar o valor desejado:
Quando eu envio o medPB “GLOBAL” pro metodo desativaCampo, que tem um medPB tambem, ele grava no medPB do metodo o valor do medPB “GLOBAL” só que eu quero fazer o metodo medPB “GLOBAL” ser modificado e nao o medPB do metodo.
Obviamente para você criar o tal array de 1 elemento para poder pegar a string antiga é um PITA .
Só que esse valorAntigo só vai existir dentro desse metodo. e eu preciso que ele exista de uma maneira “GLOBAL” na classe. pois tenho um jtextfield que nao pode entrar no metodo pra recuperar esse valor =p;
E
entanglement
Até aí você passa como parâmetro para o método uma variável de instância da classe, oras!
VictorMatuk
E pra finalizar isso tudo eu precisei pois eu queria fazer um JCheckBox que ao ser marcado, desativasse e apagasse o valor de umas JTextFields de acordo com o retorno de uma pesquisa feita na DB.
Entao se o cara resolve desmarcar o JCheckBox, esses JTextFields tem que voltar ao valor antigo (O de antes de ter o JCheckBox marcado).
VictorMatuk
entanglement:
No seu caso em particular, seria melhor retornar o valor desejado:
Ei, amigo, não precisa passar a string “texto” como parâmetro. Você viu que imediatamente ela é destruída e substituída pelo valor do textbox (linha 12 da sua listagem)?
jyoshiriro
Se for para usar retorno de método, nem precisaria passar a variável como parametro:
Provavelmente ele não gostou do Javadoc. Deve ser alguma norma na empresa dele que você não pode documentar seus métodos
VictorMatuk
eh verdade, nao posso documentar.
Nossa empresa sabe que alguns de nós futucam esse fórum. Se me pegam liberando código completo aqui eu morro.
Mas é verdade, obrigado por me mostrar que eu nao precisava passar a String como parametro. Depois de 8 horas direto programando sem descanço costuma ocorrer essas falhas hhehehehe