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 :
classXPopupMenuListenerimplementsPopupMenuListener{publicvoidpopupMenuWillBecomeVisible(PopupMenuEventevt){JComboBoxcb=(JComboBox)evt.getSource();NODEFAULT()// cb.hidePopup(); // O codigo aqui está comentado porque no meu casoprático,issonãofuncionoutambém.Omenuficavisiveldiretonatela.}outrosmetodos...}
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.
}
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
D
danieldestro
Como é vc quem implementa o Listener, faça o que quiser com os eventos, oras.
A
AdrianoFox
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 ?
D
danieldestro
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!
A
AdrianoFox
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
T
theBalrog
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…