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