将 MouseListener 添加到 JCheckBox

问题描述 投票:0回答:2

我编写了这段代码,用于在用户取消选中复选框时向用户显示警报消息。仅当我在复选框中实现鼠标键时,它才起作用。如果用户单击该复选框并释放该复选框,则允许用户取消选中该复选框并且不显示警报消息。我该如何解决这个错误?

public void mouseClicked(MouseEvent e) {        
    Vector matNoVect = new Vector();
    if (e.getClickCount() == 1) {
        Utools.setMouseBusy(sstEndProductMaterials.table);
        try {   
            Vector v = new Vector();
            v = Inter.LoadContents(str);
            System.out.println(v);
            if (v.size() > 0) {
                if (Integer.parseInt(v.get(0).toString()) > 0) {
                    JOptionPane.showMessageDialog(null,"Material "+matNo+" is used in some Item");
                    sstEndProductMaterials.table.setValueAt(new Boolean(true),index, 7);
                    Utools.setMouseNormal(sstEndProductMaterials.table);
                    return;
                }
            }    
        } catch (Exception e11) {
            e11.printStackTrace();
            Utools.setMouseNormal(sstEndProductMaterials.table);
        }
    }
}
java swing
2个回答
3
投票

使用 ItemListener 而不是 MouseListener

http://download.oracle.com/javase/tutorial/uiswing/components/button.html#checkbox

然后您可以在 ItemListener 中执行此操作:

public void itemStateChanged(ItemEvent event) {
    if (event.getStateChange() == ItemEvent.DESELECTED) {
        //Code to show alert etc.
    }
}

1
投票
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;

/** Some users are NOT addicted to the mouse!  Which is why
it would be better to add an ActionListener to a JCheckBox. */
class CheckBoxTest {

    public static void main(String[] args) {

        Runnable r = new Runnable() {
            public void run() {
                JPanel p = new JPanel(new GridLayout(0,1,20,20));

                JCheckBox cb1 = new JCheckBox("Broken on keyboard");
                cb1.addMouseListener( new MouseAdapter(){
                    @Override
                    public void mouseClicked(MouseEvent me) {
                        System.out.println("Mouse click");
                    }
                } );
                p.add( cb1 );

                JCheckBox cb2 = new JCheckBox("Works for keyboard or mouse!");
                cb2.addActionListener( new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent ae) {
                        System.out.println("Event detected!");
                    }
                } );
                p.add( cb2 );

                JOptionPane.showMessageDialog(null, p);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.