Pergunta

Pode alguém por favor me explicar por que este pedaço de impressões de código para o console quando você move o mouse sobre a caixa de seleção? Qual é a "mudança" evento que acontece?

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;


public class Test {

    public static void main(String[] args) {
        JFrame f = new JFrame();
        JCheckBox c = new JCheckBox("Print HELLO");
        c.addChangeListener(new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent e) {
                System.out.println("HELLO");
            }
        });
        f.getContentPane().add(c);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);
    }

}

NOTA: Não uso um ouvinte de ação, porque no meu programa eu quero ser capaz de fazer:

checkBox.setSelected(boolean)

e ter o meu ouvinte notificado, o que não pode ser feito com um ouvinte de ação. Então, há uma maneira de desativar este "rato sobre" evento ou outra maneira que eu posso implementar o meu ouvinte?

Foi útil?

Solução

Você recebe eventos do mouse sobre como foco ganhos / perdidos representa uma mudança para o estado do componente.

Em vez disso, você poderia usar um ItemListener que lhe dará ItemEvents.

O objeto que implementa a interface ItemListener recebe este ItemEvent quando ocorre o evento. O ouvinte é poupado os detalhes de processamento de movimentos e cliques do rato individual e em vez disso pode processar um evento "significativo" (semântica) como "item selecionado" ou "ponto desmarcada".

Você pode adicionar à sua caixa com o método addItemListener () na classe AbstractButton. Basta substituir addChangeListener com este:

c.addItemListener(new ItemListener() {

    public void itemStateChanged(ItemEvent e) {
        System.err.println(e.getStateChange());
    }
});

Outras dicas

Use c.setRolloverEnabled(false) `e você não vai obter qualquer evento para movimentos do mouse.

O estado da caixa de seleção (mesmo apenas o modelo de caixa de seleção) muda dependendo se ele tem o mouse sobre ele ou não. Portanto, um evento de mudança de estado deve ser esperado.

Assim, apenas volte para ver em que estado a caixa de seleção está dentro e atualização em conformidade. É melhor ir direto para o modelo, ao invés de usar a interface do componente "inchado".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top