我的动作中有一个MouseListener,该动作对应一个JButton。鼠标事件适用于右键单击事件,但对于左键单击事件似乎没有重置我的鼠标事件,因此每次左键单击都会播放它之前的每个左键单击鼠标事件。因此,第一个左键单击将使我的数字增加1,第二个单击将其增加2,将第三个增加3,将第四个增加3等等。每次只增加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);
}
}
}
});
}
};
答案 0 :(得分:1)
我做了一些调试,似乎是左键单击功能 要求每次左键单击组件的历史记录。
问题是每次按下按钮时都会添加一个新的MouseListener
:
@Override
public void actionPerformed( ActionEvent e ) {
((JButton)e.getSource()).addMouseListener(new MouseAdapter() {...});
}
因此,您可以呼叫每个连接到该按钮的听众。
另一方面,如果目标是根据按下的鼠标按钮增加/减少一些计数变量,那么你根本不需要ActionListener
:只需添加一次鼠标监听器即可#39; s:
JButton button = new JButton("1");
button.addMouseListener(new MouseAdapter() {...});
然而,IMO最好的方法是使用两个按钮,实现两个不同的操作并忘记鼠标监听器。