[RESOLVIDO] Algoritimo para setEnabled

9 respostas
Sad7

Ola pessoal é o seguinte, eu tenho a seguinte função no meu projeto:

private void habilitaDesabilita(boolean estado) { chk00.setEnabled(estado); chk01.setEnabled(estado); chk02.setEnabled(estado); chk03.setEnabled(estado); chk04.setEnabled(estado); chk05.setEnabled(estado); chk06.setEnabled(estado); chk07.setEnabled(estado); chk08.setEnabled(estado); chk09.setEnabled(estado); chk10.setEnabled(estado); chk11.setEnabled(estado); chk12.setEnabled(estado); chk13.setEnabled(estado); chk14.setEnabled(estado); chk15.setEnabled(estado); chk16.setEnabled(estado); chk17.setEnabled(estado); chk18.setEnabled(estado); chk19.setEnabled(estado); chk20.setEnabled(estado); chk21.setEnabled(estado); chk22.setEnabled(estado); chk23.setEnabled(estado); chk24.setEnabled(estado); }

sera q teria alguma forma de nao ficar um codigo pobre assim?!, fazer algum foreach ou algo mais automatizado?!
valeu!!

Abraçoss!

9 Respostas

M

Se seus CheckBox estiverem num vetor ou num ArrayList, por exemplo, você pode fazer isso sim. Agora, se cada CheckBox é uma variável diferente, fica mais complicado… (não vou dizer que não dá, pois o pacote java.lang.reflection existe, mas deixa muito estilo POG…).

Vini_Fernandes

Eu faria o seguinte:

public class SuaClasse(){
 //ao inves de declarar 24 objetos do tipo CheckBox, voce tera apenas um array
 private CkeckBox[] ck = new CheckBox[24];

 public SuaClasse(){
  for(int k =0 ; k < ck.length; k++){
   ck[k] = //TODO inicializando seu check box; 
  }
 }

  //o restante de sua classe
 
 private void habilitaDesabilita(boolean estado) {
   for(int k =0 ; k < ck.length; k++){
   ck[k].setEnabled(estado); 
  }
 }
  
}

ou ainda

public class SuaClasse(){
 //ao inves de declarar 24 objetos do tipo CheckBox, voce tera apenas um array
 private Collection<CkeckBox> lista = new LinkedList<CheckBox>();

 public SuaClasse(){
  lista.add(//TODO inicializando seu check box 1);
  ...
  lista.add(//TODO inicializando seu check box 24); 
 }

  //o restante de sua classe
 
 private void habilitaDesabilita(boolean estado) {
   for(CheckBox ck : lista){
   ck.setEnabled(estado); 
  }
 }
  
}

Espero ter ajudado!

M

Vini Fernandes:
Eu faria o seguinte:

public class SuaClasse(){
 //ao inves de declarar 24 objetos do tipo CheckBox, voce tera apenas um array
 private CkeckBox[] ck = new CheckBox[24];

 public SuaClasse(){
  for(int k =0 ; k < ck.length; k++){
   ck[k] = //TODO inicializando seu check box; 
  }
 }

  //o restante de sua classe
 
 private void habilitaDesabilita(boolean estado) {
   for(int k =0 ; k < ck.length; k++){
   ck[k].setEnabled(estado); 
  }
 }
  
}

ou ainda

public class SuaClasse(){
 //ao inves de declarar 24 objetos do tipo CheckBox, voce tera apenas um array
 private Collextion<CkeckBox> lista = new LinkedList<CheckBox>();

 public SuaClasse(){
  lista.add(//TODO inicializando seu check box 1);
  ...
  lista.add(//TODO inicializando seu check box 24); }

  //o restante de sua classe
 
 private void habilitaDesabilita(boolean estado) {
   for(CheckBox ck : lista){
   ck.setEnabled(estado); 
  }
 }
  
}

Espero ter ajudado!


Eu faria algo parecido, mas na verdade são 25 checkboxes.

Sad7

Vini Fernandes:
Eu faria o seguinte:

public class SuaClasse(){
 //ao inves de declarar 24 objetos do tipo CheckBox, voce tera apenas um array
 private CkeckBox[] ck = new CheckBox[24];

 public SuaClasse(){
  for(int k =0 ; k < ck.length; k++){
   ck[k] = //TODO inicializando seu check box; 
  }
 }

  //o restante de sua classe
 
 private void habilitaDesabilita(boolean estado) {
   for(int k =0 ; k < ck.length; k++){
   ck[k].setEnabled(estado); 
  }
 }
  
}

ou ainda

public class SuaClasse(){
 //ao inves de declarar 24 objetos do tipo CheckBox, voce tera apenas um array
 private Collection<CkeckBox> lista = new LinkedList<CheckBox>();

 public SuaClasse(){
  lista.add(//TODO inicializando seu check box 1);
  ...
  lista.add(//TODO inicializando seu check box 24); 
 }

  //o restante de sua classe
 
 private void habilitaDesabilita(boolean estado) {
   for(CheckBox ck : lista){
   ck.setEnabled(estado); 
  }
 }
  
}

Espero ter ajudado!

criar um array resolveria com ctz meu problema de codigo porem como eu iria posicionar esses checks na tela?!

M

Qual gerenciador de leiaute você está usando?

Sad7

axo q jah sei como posicionar…
eu faço um laço para o seguinte codigo:

//---- chk01 ---- chk01.setText("01:00"); panel5.add(chk01, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 5, 5), 0, 0));

onde o chk01 seria meu array

M

Sad7:
axo q jah sei como posicionar…
eu faço um laço para o seguinte codigo:

//---- chk01 ---- chk01.setText("01:00"); panel5.add(chk01, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 5, 5), 0, 0));

onde o chk01 seria meu array

chk01 seria oa array? Acho que não daria certo, pois você deve passar um objeto do tipo Component para o método ‘add()’ e não uma array de componentes. Você deve adicionar um a um.

Sad7

consegui =D

da sseguinte maneira, colkei todos os chks dentro de um JPanel:

private void habilitaDesabilitaHoras(boolean estado) {
		for (int i = 0; i < pnlHorarios.getComponentCount(); i++) {
			Component component = pnlGroup.getComponent(i);
			
			if(component instanceof JCheckBox){
				((JCheckBox)component).setEnabled(estado);
			}			
		}
	}
M
Sad7:
consegui =D

da sseguinte maneira, colkei todos os chks dentro de um JPanel:

private void habilitaDesabilitaHoras(boolean estado) {
		for (int i = 0; i < pnlHorarios.getComponentCount(); i++) {
			Component component = pnlGroup.getComponent(i);
			
			if(component instanceof JCheckBox){
				((JCheckBox)component).setEnabled(estado);
			}			
		}
	}
Boa! Bela ideia. :)
Criado 2 de outubro de 2009
Ultima resposta 2 de out. de 2009
Respostas 9
Participantes 3