Java MouseEvent在actionPerformed中左键单击

时间:2014-10-03 12:44:31

标签: java swing events action mouselistener

我的动作中有一个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); 
                        }

                    }
                }

            });
        }

    };

1 个答案:

答案 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最好的方法是使用两个按钮,实现两个不同的操作并忘记鼠标监听器。