Problemas com mouselistener!

5 respostas
P
oi alguem pode me ajudar? estou desenvolvendo uma aplicação que gostaria que ocorresse o seguinte: Ao selecionar um checkbox abrir um jframe tentei usar o mouse listener de duas formas mas nenhuma deu certo :cry: A primeira á parte que esta comentada e a segunda é o codiog que esta logo abaixo do codigo comentado:
botao5.addActionListener (new ActionListener (){  //inclui o aluno na turma q n estiver cheia
			public void actionPerformed(ActionEvent e)//so exibe as turmas q ainda podem inserir alunos
			{
				try {
					conexao = conecta.conectabanco();
					comando = conexao.createStatement();

				}
				catch(Exception e1) {
					JOptionPane.showMessageDialog(null, "Erro na conexão com o banco");
				}

				for(int i=0;i<ck.length;i++)

					if(ck[i]!=null)
					{
							try {
								resultado = comando.executeQuery("select Id from aluno where nome='"+t0.getText()+"' and data_nascimento='"+t1.getText()+"'");
								resultado.next();
								z=resultado.getObject(1).toString();
								if(z!=null )
								{	
//									System.out.println("antes de usar o addmouselistener");
//									
//									ck[i].addMouseListener(new MouseListener() {
//									
//										
//										public void mouseReleased(MouseEvent e) {
//											//habilita();
//											System.out.println("released");
//											
//										}
//										
//										public void mousePressed(MouseEvent e) {
//											//habilita();
//											System.out.println("pressed");
//										}
//										
//										public void mouseExited(MouseEvent e) {
//											//habilita();
//											System.out.println("exited");
//											
//										}
//										
//										public void mouseEntered(MouseEvent e) {
//											//habilita();
//											System.out.println("entered");
//											
//										}
//										
//										public void mouseClicked(MouseEvent e) {
//											java.awt.EventQueue.invokeLater (new Runnable () {   
//												public void run () {   
//													new modulos ().setVisible(true);   
//												}   
//											}); 
//											System.out.println("clicked");
//											
//										}
//										
//									});
									ck[i].addMouseListener(new java.awt.event.MouseAdapter() {   
									    public void mouseReleased(java.awt.event.MouseEvent e) {   
									        System.out.println (e);   
									        if (e.getButton() == MouseEvent.BUTTON3) {   
									        	java.awt.EventQueue.invokeLater (new Runnable () {   
									        		public void run () {   
									        				System.out.println("dentro do metodo q chama a class modulo");
									        				new modulos ().setVisible(true);   
									        			}  
									        		});   
									        }   
									    }   
									});  
									if(ck[i].isSelected())
									{
										
									comando.executeUpdate("insert into disciplina_modulo_aluno (disciplina,rc_aluno) values ('" + ck[i].getText() + "','" + z + "')" );
									JOptionPane.showMessageDialog(null, "As disciplinas foram inseridas com sucesso!");
								}
							}
							}
							catch(Exception e1) {
								JOptionPane.showMessageDialog(null, "Erro ao inserir disciplinas!!");
								e1.printStackTrace();
							}
						}
					}
			
				

			});
Alguem pode me ajudar a encontrar os erros?? obrigada

5 Respostas

E

Num checkbox, não se usa MouseListener, a menos que você queira usar alguma coisa muito específica. Vou dar um exemplo bem simples.

E

Normalmente você usa actionListener. Em alguns casos, você pode usar itemStateChanged. Tem gente que usa stateChanged se quer inspecionar tudo que ocorre dentro do frame, o que provavelmente não é seu caso. Você só usa mouseListener em último caso, já que é muito compilcado fazer isso funcionar direito (principalmente do jeito que você quer, que é mostrar uma caixa de diálogo).

package guj;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class ExemploJCheckBox extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;
    private JPanel pnlBotoes = null;
    private JButton btnOK = null;
    private JPanel pnlCheckboxes = null;
    private JCheckBox chkbox001 = null;
    private JCheckBox chkbox002 = null;
    private JCheckBox chkbox003 = null;

    private JPanel getPnlBotoes() {
        if (pnlBotoes == null) {
            pnlBotoes = new JPanel();
            pnlBotoes.setLayout(new FlowLayout());
            pnlBotoes.add(getBtnOK(), null);
        }
        return pnlBotoes;
    }

    private JButton getBtnOK() {
        if (btnOK == null) {
            btnOK = new JButton();
            btnOK.setText("OK");
        }
        return btnOK;
    }

    private JPanel getPnlCheckboxes() {
        if (pnlCheckboxes == null) {
            pnlCheckboxes = new JPanel();
            pnlCheckboxes.setLayout(new BoxLayout(getPnlCheckboxes(), BoxLayout.Y_AXIS));
            pnlCheckboxes.add(getChkbox001(), null);
            pnlCheckboxes.add(getChkbox002(), null);
            pnlCheckboxes.add(getChkbox003(), null);
        }
        return pnlCheckboxes;
    }

    /**
     * Usa actionPerformed (recomendado)
     * 
     * @return javax.swing.JCheckBox
     */
    private JCheckBox getChkbox001() {
        if (chkbox001 == null) {
            chkbox001 = new JCheckBox();
            chkbox001.setText("Checkbox 001 - actionPerformed");
            chkbox001.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    System.out.println("checkbox 001: actionPerformed()");
                }
            });
        }
        return chkbox001;
    }

    /**
     * Usa itemStateChanged
     * 
     * @return javax.swing.JCheckBox
     */
    private JCheckBox getChkbox002() {
        if (chkbox002 == null) {
            chkbox002 = new JCheckBox();
            chkbox002.setText("Checkbox 002 - itemStateChanged");
            chkbox002.addItemListener(new java.awt.event.ItemListener() {
                public void itemStateChanged(java.awt.event.ItemEvent e) {
                    System.out.println("checkbox 002: itemStateChanged()"); // TODO Auto-generated Event stub
                                                                            // itemStateChanged()
                }
            });
        }
        return chkbox002;
    }

    /**
     * Usa stateChanged: isto dispara muitas vezes seguidas, portanto não é aconselhado, a menos que você saiba o que
     * está fazendo.
     * 
     * @return
     */
    private JCheckBox getChkbox003() {
        if (chkbox003 == null) {
            chkbox003 = new JCheckBox();
            chkbox003.setText("Checkbox 003 - stateChanged");
            chkbox003.addChangeListener(new javax.swing.event.ChangeListener() {
                public void stateChanged(javax.swing.event.ChangeEvent e) {
                    System.out.println("checkbox 003: stateChanged()");
                }
            });
        }
        return chkbox003;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                ExemploJCheckBox thisClass = new ExemploJCheckBox();
                thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                thisClass.setVisible(true);
            }
        });
    }

    public ExemploJCheckBox() {
        super();
        initialize();
    }

    private void initialize() {
        this.setSize(300, 200);
        this.setContentPane(getJContentPane());
        this.setTitle("Exemplo JCheckBox");
    }

    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(new BorderLayout());
            jContentPane.add(getPnlBotoes(), BorderLayout.SOUTH);
            jContentPane.add(getPnlCheckboxes(), BorderLayout.CENTER);
        }
        return jContentPane;
    }
}
E

Mais uma coisa. Se quiser, ao clicar em um checkbox, que o comportamento seja diferente se clicar com um outro botão (é isso que você quer fazer?) então isso é possível. Vou modificar o exemplo dado.

P

oi entanglement
na verdade o q eu qr fazer é clicar em uma checkbox e abrir uma outra tela
isso é possivel?
bah obrigada pelas explicações e pelo exemplo ja me tirou algumas duvidas
=]

E

Para abrir uma outra tela, o que é bem simples e é o que você quer, basta você substituir o "System.out.println (“Checkbox 001 - actionListener”) " do exemplo que eu dei, pelo código para abrir a outra tela.

(Realmente, eu tentei ver se era fácil acionar alguma coisa apertando o botão direito (em vez do esquerdo) quando fosse clicar no checkbox, e não foi muito fácil; para o que você quer, acho que não precisa ainda (eu na verdade nunca vi uma aplicação que fizesse uma coisa diferente do normal se você clicasse em um checkbox com o botão direito em vez do esquerdo). Entretanto, você fazer alguma outra coisa, se você clicar com o botão esquerdo mas também com uma tecla Control ou Shift ou Alt pressionada ao mesmo tempo, é bem mais fácil. )

Criado 20 de dezembro de 2010
Ultima resposta 20 de dez. de 2010
Respostas 5
Participantes 2