JToggleButtons em JToolBar

4 respostas
andretco

Oi Pessoal, a situação é a seguinte:

  • Tenho um JToolBar com n JToggleButtons;
  • O JToolbar têm implementado a interface ItemListener;
  • Ao apertar um botão, se pode desenhar uma figura asociada ao botão, por exemplo: um circulo na área de desenho.

Agora o problema é o seguinte:

  • Gostaria que ao momento de apertar um botão, os outros botões (que estão ON) se desativem (fiquem OFF) e se possa desenhar a figura asociada imediatamente.

Fiz um método para deixar os outros botões desativados:

private void disableOtherButtons (JToggleButton actualButton){
							
      for (int i=0; i<this.getComponentCount();i++){

            JToggleButton otherButton = (JToggleButton)this.getComponentAtIndex(i);

            if (otherButton.equals(actualButton) == false){

                  otherButton.setSelected(false);
            }
      }
}

O ItemListener está assim:

public void itemStateChanged(ItemEvent e) {

      Object source = e.getSource();
      JToggleButton button = (JToggleButton)source;

      if(button.equals(circBtn) && e.getStateChange() == ItemEvent.SELECTED){	
            TDraw_.draw(TDraw.CIRCLE);
             this.disableOtherButtons(newCircBtn);
      }

      else
            TDraw_.draw(0); //não se desenha nada
}

Ao apertar por primeira vez um botão, se pode desenhar a figura asociada imediatamente, mas ao apertar outro botão, não se pode desenhar a figura imediatamente. Eu tenho que “apagar” e “acender” de novo esse botão para que se possa desenhar.

Como disse anteriormente, gostaria que se pudesse desenhar imediatamente ao apertar qualquer botão e quando está desativado não se possa desenhar nada.

Muito Obrigado de antemão.

4 Respostas

andretco

Já resolvi-o. Era bem simples mesmo.

ViniGodoy

Ao invés de criar e gerenciar aquele método, pense em adicionar todos os botões num ButtonGroup.
O ButtonGroup automaticamente garante “exclusão mútua” para os botão, permitindo que um só fique selecionado.

ButtonGroup bg = new ButtonGroup(); bg.add(toggleButton1); bg.add(toggleButton2); bg.add(toggleButton3);

Ele também funciona para checkboxes e radio buttons.

andretco

mmmm…não sabia isso.

Muito obrigado pela informação. Vou experimentar.

O que eu fiz ao final foi implementar um ActionListener mantendo o método disableOtherButtons() e agregando no else um if (button.isSelected()==false).

ViniGodoy

Eu imaginei. Esse esquema com else dá muito trabalho de fazer e de manter. É meio sujeito a erros também. :S

Não é a toa que a Sun criou uma classe para isso. E não é uma surpresa também. Eles criam classes para tudo! :smiley:

Criado 14 de dezembro de 2007
Ultima resposta 17 de dez. de 2007
Respostas 4
Participantes 2