【问题标题】:Add MouseListener to JCheckBox将 MouseListener 添加到 JCheckBox
【发布时间】:2010-10-31 07:51:04
【问题描述】:

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

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 core


    【解决方案1】:

    使用 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.
        }
    }
    

    【讨论】:

      【解决方案2】:
      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);
          }
      }
      

      【讨论】:

      猜你喜欢
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 2015-09-04
      • 2013-06-29
      • 1970-01-01
      • 2018-02-19
      • 1970-01-01
      相关资源
      最近更新 更多