Habilitar botão ao ter todos os campos preenchidos[RESOLVIDO]

Boa tarde galera!

Tenho a seguinte dúvida mencionada no título do tópico. Queria habilitar o botão Ok da minha aplicação (swing) somente quando os 6 campos (JTextField) estiverem preenchidos. Já procurei no google e aqui no Guj mas ainda não achei a solução. Nunca fiz aplicação swing e estou com essa dúvida. Tem que ser tipo em tempo de execução da aplicação. Vou preenchendo os campos, e quando todos estiverem preenchidos, botão ok habilita. Espero que possam me ajudar.

Desde já agradeço.

Obs: Gostaria de saber se é necessário encerrar o tópico. Se sim, como faço?

Dê uma pesquisada por ActionListener…

Cria uma método validador de campos…
Não é uma meneira bonita de se fazer mas é uma solução…
Adicione eventos nos campos, chamando a validação que vc criou…

Ao término quando a validação tiver OK, vai liberar o botao…

public boolean validaCampos(){

if(!campo!=null && !campo2!=null .. etc){
 return true;
}else{
return false;
}

TheKill, fiz um método semelhante a este mas onde o chamo? Tem que chamar em um actionListener como disse o amigo acima???

Sim. vai ter que criar ActionListenner para cada campo da sua tela… no caso 6

Tentei aqui e não obtive sucesso. Em outras linguagens faz-se isso facilmente mas em java swing é foda. Continuarei pesquisando no pai google!!

[code] Campo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CampoActionPerformed(e);
}
});

private void CampoActionPerformed(ActionEvent e) {

}

[/code]

Não cara na verdade você precisa ter o listener especifico para cada tipo de objeto.

Tipo você cria o método que verifica se os campos estão preenchidos e se estiver ele habilita o botão, tipo se o combo não está com o valor selecione ou se o textfield é diferente de vazio.

e ai você faz a chamada ao método nos listeners adicionados em cada campo, tipo FocusListener para o textfield e changeListener para combo. Você vai ter que pesquisar o listener especifico para cada componente que utilizar.

Fiz aqui. Achei algo no google e fiz. Fiz da seguinte forma:

JTextField1.getDocument().addDocumentListener(
				new DocumentListener() {
					String str1;
					@Override
					public void removeUpdate(DocumentEvent arg0) {
						str1 = JTextField1.getText();

						if(str1.length() < 1 )
							btnOk.setEnabled(false); //Botão Ok desabilitado
					}
					@Override
					public void insertUpdate(DocumentEvent arg0) {
						btnOk.setEnabled(true); //Botão Ok habilitado
					}
					@Override
					public void changedUpdate(DocumentEvent arg0) {
					}
				});

Só que tenho 7 JTextField que tem que ser verificado, ou seja, todos devem estar preenchidos para que o botão habilite. Se eu fizer esse getDocument em todos os JtextField terá uma falha. Pois ele fará uma verificação independente. A verificação será feita somente no primeiro JTextField. Se esse primeiro estiver preenchido, o botão sempre vai habilitar, e se os demais não estiverem preenchidos o botão continua habilitado pois o 1º está preenchido. Fica bizarro. Alguém uma idéia de como posso melhorar isso??

Tipo fazer a verificação nos componentes JTextFields da tela. Fazer pra qq tipo JTextField.

Vai precisar esse trecho de codigo para cada JTextField…

Sim mas vai cair no erro que mencionei. O programa vai verificar o 1º JTextField…“Está preenchido?” se sim Habilita botão senão mantém desabilitado. E vai ignorar os demais. Ele tem que permitir habilitar o botão quando todos os JTextFields estiverem prenchidos. Se um não estiver, mantém desabilitado.

Por isso falei pra vc criar o metodo de validação de Todos os campos da tela!!!

Veja os post´s acima comentados

[quote=TheKill]
Cria uma método validador de campos…
Não é uma meneira bonita de se fazer mas é uma solução…
Adicione eventos nos campos, chamando a validação que vc criou…

Ao término quando a validação tiver OK, vai liberar o botao…

[code]
public boolean validaCampos(){

if(!campo!=null && !campo2!=null … etc){
return true;
}else{
return false;
}
[/code][/quote]

que tal criar um listener de foco para cada campo retornando uma variavel caso
o .getText() de cada um dos campos retornar diferente de vazio.
Depois criar uma estrutura de condição para dar setEnabled(true)
apenas quando houver retorno diferente de vazio para cada campo.

Será que isso não deve ser feito em algum evento do botão? Tipo o default dele é setEnabled(false) e quando todos os JTextField estiverem preenchidos, habilitar o botão. Em outras linguagens isso é fácil de se implementar. Ja fiz isso no C#.

nao, a propriedade de habilitado ou desabilitado nao precisa de um evento pra que seja mudado,
eu sugiro que você faça é criar eventos para os capos de texto para que cada vez que eles recebam foco, ou seja, sejam selecionados para
mudança escrita de texto, voce dispare uma flag que indique que foram modificados para diferente de null ou algo que você preferir.
assim quando todos os campos estiverem retornando como preenchidos (ou algo que voce escolha) voce possa dar um .setEnabled(true) no seu jbutton.

Em java também é fácil o que você tem que fazer e

[code]class A implements FocusListener{
JtextField a;
JtextField b;
Jbutton c;

 public A(){
      inicialização dos componentes...
 } 


  public void focusLost(FocusEvent event){
      if(!a.getText().isEmpty && !b.getText().isEmpty()){
          c.setEnabled(true);
      }else{
          c.setEnabled(false);
      }
  }

}[/code]

Vou avisando não testei o código mas acredito que ele vai te fazer entender a ideia.

luciano@@,

Testei dessa forma aí e não deu certo.

que IDE voce ta usando?

eclipse.