Loop para verificar cor de botão

26 respostas
T

Eu fiquei em dúvida se postava isso aqui, no avançado ou no interface gráfica. Mas eu acho que aqui está melhor.

Bom, eu to fazendo um programa e eu quero fazer o seguinte: uma verificação por loop da cor de fundo de cada botão.
Eu sei que daria para fazer tudo por if, if, if, if… mas aí é absurdo. São 176 botões.

Então, como eu sei que deve ter um jeito mais fácil de se fazer isso e eu não sei como esse jeito é, eu vim perguntar pra vcs! =)

A idéia básica é:

e assim sucessivamente…

Existem outras cores para verificar, mas tendo a idéia básica eu coloco no meu código o resto.

Valeu,
Tork

26 Respostas

T

Pergunta imbecil número um. Como é que você criou esse caminhão de botões? Usou um array?

T

Hahahahaa, boa!

Eu criei usando três loops diferentes. Um para declarar os botões, um para criar o código dos botões e um para adicioná-los à janela.
Todos os botões tem o mesmo nome padrão. 0101, 0102, ou seja, linha 01, coluna 01, linha 01, coluna 02. Com isso eu criei os loops variando de 01 até 11 para linha e de 01 até 16 para coluna.
:smiley:

T

Estou usando o método “socrático”. Vou lhe perguntando as coisas até que você mesmo descubra a solução. Se você usou três loops…

T

Hahaha, beleza, aceito seu jeito! :smiley:

Sim, eu usei três loops… Hehehe

Mas então, a minha dúvida é como eu “navego” pelos botões. Porque esse três loops era só impressão.

porque se eu armazenar todos os nomes de botões em um array por exemplo, não vou conseguir o método ‘getBackground’ porque não vai ser compatível com o tipo String.

T

Hum, será que se eu gerar varias variáveis, armazenando a cor de cada botão e depois verificar cada variável dá certo?

Não, aí eu fico na mesma, com os ifs…

T

Ainda não consegui achar uma solução.

Eu preciso fazer um loop para verificar qual a cor de um número de botões e executar determinadas coisas dependendo da cor.

Alguém pode me ajudar?

rmarin

Cara, coloca seu código aqui. Quem sabe posso te ajudar. :thumbup:

Mantu

Ou rmarin! Vamos tentar ensinar o rapaz a pescar! :thumbup:

Caro colega tork! Me diga uma coisa: As ações a serem tomadas dependem unica e exclusivamente da cor do botão, seja este botão qual for?

T

Sim, dependem da cor do botão.

Eu tenho, por exemplo, 5 botões. Quando um botão é clicado ele muda de cor. Depois de definidas as cores de todos os botões, eu quero fazer uma verificação da cor de cada botão. Se o botão1 for verde, determinada ação acontece. Se for azul, outra coisa acontece.

Valeu,
Tork

tatianaesc

Olá,

Não se se eu entendi bem, mas pelo que eu entendi, cada possível ação está associada a uma cor, e não a um botão específico, certo?

Se for assim, você pode criar um método de verificação assim:

private void checkButtonColor( JButton button )

{

if( button.getBackground==Color.WHITE)

{

//do something

}

else if( button.getBackground==Color.BLACK)

{

//do something

}

…

}

Agora, se pra cada botão específico for uma ação diferente, aí você provavelmente terá que checar de um em um…

[]´s
Tatiana

T

Ah sim, eu posso checar um por um, fazer esse código aí para todos os botões, mas são 176, meio complicado.

Mas agora que você postou esse código, eu acho que eu poderia fazer um loop que chama esse método com cada botão como argumento. Em cada loop o método checkButtonColor é chamado com um botão. Vou tentar isso.

Valeu.

tatianaesc

Oi,

Você não precisa escrever esse código para cada botão. Como você disse, basta em cada verificação, você chamar o método. Isso não tem jeito se você precisa testar um por um.

[]´s
Tatiana

T

É mesmo, você falou isso: "Agora, se pra cada botão específico for uma ação diferente, aí você provavelmente terá que checar de um em um… " Aí sim, tá certo.

Valeu!

T
Mas, então,  para ficar claro. Não tem um jeito de eu fazer um loop para mandar todos os botões? Porque eu tentei fazer, mas no loop, eu preciso incrementar 1 no botão que eu vou mandar.

Por exemplo:

Loop 1

checkButtonColor(Botão1);

Loop 2

checkButtonColor(Botão2);

Loop 3

checkButtonColor(Botão3);

Só que assim eu não sei como fazer para ir mudando para o próximo botão. Se fosse uma String daria para adicionar um número correspondente no fim, mas passando botões como argumento eu não sei.

O que eu entendi que  para fazer é:

buttonVerificaCor

ActionListener{

verificaCor(botão1);

verificaCor(botão2);

verificaCor(botão3);

}

Foi assim que eu entendi. Mas deve ter um jeito menos consumidor de linha de código, não?

tatianaesc

Olá,

Tem sim, desde que você crie uma lista ou um array dos seus botões (o que acredito que você já deve ter feito para criar todos esses botões). Então, você pode usar o iterator para iterar sobre a sua coleção. Se você não tiver os botões em nenhum tipo de coleção, aí realmente vai ter que chamar de um em um.

[]'s
Tatiana

T

É, na verdade eu não tenho eles em uma coleção. Eu criei os botões por loop.

Só uma pergunta: o que é o iterator?

tatianaesc

Pode colar o código de criação aqui?

T

Ué, o código é um loop que gera um linha de texto.

Por exemplo:

for (int x = 0; x &lt 16; x++){
System.out.println("private JButton botao"+x);
}

Aí, eu peguei essas linhas e colei no código.

rmarin

Onde você setta as cores destes botões?
Quais as cores que você usa?

Dá pra colocar o código inteiro aqui, pelo amor de Deus:!::?:

dudaskank

tork:
Ué, o código é um loop que gera um linha de texto.

Por exemplo:

for (int x = 0; x < 16; x++){
System.out.println("private JButton botao"+x);
}

Aí, eu peguei essas linhas e colei no código.

Pra começar, não faça isso!!! Use um for, mas no programa mesmo… algo assim:

JButton botao;
for (int x = 0; x < 16; x++){
    botao = new JButton();
    botao.setName("botão" + x);
    seuContainer.add(botao);
}

observa ali que eu coloquei um nome interno pra cada botão, você pode usar isso ou colocar os botões também em uma lista, para você poder iterar por ela mais tarde.

flw

tatianaesc

Tork, e fazendo desta forma que o dudaskank falou, você pode chamar o método de verificação das cores dos botões para cada elemento da sua coleção, usando o Iterator.

[]´s
Tatiana

Mantu

Olá tork!
quando vc respondeu ao Thingol, vc disse:

Teria como vc postar aqui o seu código referente a aos loops que criaram os botões?

T

Não dá para postar o código aqui, é muito grande. Eu fiz de um jeito muito ‘primitivo’. O jeito que o dudaskank falou é melhor e eu não tinha pensado nele. Na verdade, eu estou fazendo isso de xereta e é por isso que eu usei um código tão trabalhoso.

Mantu, os loops que eu fiz foram só para gerar um texto-código que eu colei no arquivo java. O texto-código era algo como

private JButton botao1; private JButton botao2; //etc.

Vou arrumar meu código e posto aqui qualquer coisa.

Valeu ! :smiley:

Mantu

Olha só então:
Vc deve estar inserindo estes botões em um JFrame ou JDialog ou JPanel, certo?
Todas essas 3 classes aí têm um método chamado getComponents que retorna um array de objetos do tipo Component. Um objeto do tipo JButton é, também, um objeto do tipo Component, assim como objetos do tipo JTextField, do tipo JLabel também o são.
Sendo assim, vc pode obter, a partir do seu JFrame(ou JDialog ou JPanel, etc) um array com todos os componentes da sua tela. Daí, você poderia fazer uma iteracao sobre este array e, a cada elemento, primeiro você “perguntaria” se ele é um do tipo JButton; se for, então vc verifica a cor dele e faz o que for necessário; se não for, vc passa batido.
Tenta fazer allgo assim e depois nos conte se conseguiu, ou se é viável essa solução, ok?

T

Valeu Mantu, vou ver isso que você falou também! :smiley:

dudaskank

outra opção é, usando esse mesmo getComponents() que te retorna o array de componentes, é ir vendo o nome de cada um e se começa com “botão”, ou ainda ver se o componente é um JButton usando:

arrayDeComponentes[i] instanceof JButton

que te retorna true… mas isso se vc não tiver nenhum outro JButton no container claro, senão não da pra usar…

flw

Criado 16 de agosto de 2006
Ultima resposta 25 de ago. de 2006
Respostas 26
Participantes 6