Ola
No Swing existe alguma maneira de dentro dos listeners, impedir que o evento aconteça, tipo NODEFAULT em algumas linguagens ?
Exemplo : A idéia é o JComboBox não mostrar o popup quando o usuario clicar no botão :
Segue a classe listener do controle :
class XPopupMenuListener implements PopupMenuListener {
public void popupMenuWillBecomeVisible(PopupMenuEvent evt) {
JComboBox cb = (JComboBox)evt.getSource();
NODEFAULT()
// cb.hidePopup(); // O codigo aqui está comentado porque no meu
caso prático, isso não funcionou também. O menu fica visivel direto na
tela.
}
outros metodos...
}
Outra coisa interessante também, no mesmo assunto : E em como descarregar os eventos progamaticamente (Do events)? Ex. :
public void popupMenuWillBecomeVisible(PopupMenuEvent evt) {
JComboBox cb = (JComboBox)evt.getSource();
DESCARREGA_TODOS_OS_EVENTOS() ;
// cb.hidePopup(); // O codigo aqui está comentado porque no meu
caso prático, isso não funcionou também. O menu fica visivel direto na
tela.
}
Abs
Adriano
Pq quer NÃo abrir o popup do Combo? Desabilite-o.
Fala Daniel.
Então, nesse caso específico, se desabilita-lo, fica aquela corzinha fraca e não tenho acesso a DisableforegroundColor dele.
Sei que posso modificar a classe UI da JComboBox pra evitar isso, mas gostaria de evitar.
Independete desse meu problema, e quanto aos NODEFAULT e ao DO EVENTS ? Tem algo similar em java ?
abs
Adriano
Como é vc quem implementa o Listener, faça o que quiser com os eventos, oras.
Mas pelo que entendi, o listener é um código executado antes do evento ocorrer. Não tenho controle sobre o evento em si.
E se eu não quiser que o evento ocora ? Captei o evento pelo listener, executei um código e decido não executa-lo. Exemplo :
Alguem tecla TAB. O evento normal seria passar para o próximo campo, mas no listener eu detecto isso e decido não processar o TAB.
Ou no caso que postei mesmo : O usuario clica no botão do popup do combo, mas o listener capta isso e decide não executar o evento.
Tem como fazer isso ?
Então não é o caso dos listeners de eventos do componente.
Sinceramente não sei se você consegue este tipo de interação como está. Acho que terá que alterar o comportamento dos componentes. ACHO!
Olá.
O meu problema pontual já resolvi, era mudar a cor quando o o componenete estiver desabilitado.
Mas esse assunto me levou a curiosidade de até que ponto os eventos podem ser controlados. Exemplo, quando clicamos em um botão, ele invariavelmente fica mais escuro. Esse evento poderia ser cancelado ou modificado por outro, sem mudar a classe pai do objeto ?
Teoricamente o que você sujeriu deveria funcionar.
Mas acho que alguns eventos dos componentes são protegidos, não podem ser removidos. Ou deve ser outro listener, tipo o listener do botãozinho do combo, instanciado em algum momento em classes anteriores, sei lá.
Fiz o teste e, clicando no menu popup do combo, o menu continua sendo exibido.
Valeu pela dica.
abs
Adriano
Kra… A API do Java te dá muito recurso… Tenta dar uma olhada lá… às vezes a solução é bem mais fácil que vc pensa…
O que vc pode fazer é simples:
PopupMenuListener[] array = seuCombo.getPopupMenuListeners();
for(int i = 0; i < array.length; i++)
seuCombo.removePopupMenuListener(array[i]);
Esse trecho de código irá remover todo e qualquer listener que seu combo tiver, se eu não me engano, é isso que você queria…
Agora está fácil, é só você adicionar o seu listener que o combo só fará o que vc mandar… (HUAHAUAHAU)
ABraço kra… Se não for isso, posta ae…