【发布时间】:2014-10-03 12:44:30
【问题描述】:
我的动作中有一个 MouseListener,该动作对应于一个 JButton。鼠标事件适用于右键单击事件,但对于左键单击事件它似乎没有重置我的鼠标事件,因此每次左键单击都会播放它之前的每个左键单击鼠标事件。因此,第一次左键单击将使我的数字增加 1,第二次将其增加 2,第三次增加 3,第四次增加 4,依此类推。它应该每次只增加 1。我做了一些调试,似乎每次左键单击组件的历史记录都会调用左键单击功能。
有什么想法吗?
private void setupActions()
{
oneAction = new AbstractAction( "1" )
{
@Override
public void actionPerformed( ActionEvent e )
{
((JButton)e.getSource()).addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked( MouseEvent e )
{
if ( SwingUtilities.isLeftMouseButton(e) )
{
Integer quantityField = (Integer) model.getValueAt(0, 3);
if ( quantityField == null || quantityField == 0)
{
quickOrderTableModel.setValueAt(1, 0, 3);
}
else
{
Integer newValue = (quantityField + 1);
quickOrderTableModel.setValueAt(newValue, 0, 3);
}
}
if ( SwingUtilities.isRightMouseButton(e) )
{
Integer quantityField = (Integer) model.getValueAt(0, 3);
if ( quantityField == null || quantityField == 0)
{
quickOrderTableModel.setValueAt(0, 0, 3);
}
else
{
Integer newValue = (quantityField - 1);
quickOrderTableModel.setValueAt(newValue, 0, 3);
}
}
}
});
}
};
【问题讨论】:
-
如果单击按钮,则调用方法 actionPerformed( ActionEvent e )。每次如果发生这种情况,您就向按钮添加一个新的 MouseListener。因此,如果您第一次单击该按钮,则它有一个 MouseListener。如果您第二次单击该按钮,则它有两个 MouseListener。如果您第三次单击该按钮,则它具有三个 MouseListener...
标签: java swing events action mouselistener