gpt4 book ai didi

Java MouseEvent 在 actionPerformed 内单击鼠标左键

转载 作者:行者123 更新时间:2023-12-01 12:28:06 25 4
gpt4 key购买 nike

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

}
}

});
}

};

最佳答案

I did some debugging and it seems that the left click function is called for every left click on the history of the component.

问题是每次按下按钮时都会添加一个新的 MouseListener:

@Override
public void actionPerformed( ActionEvent e ) {
((JButton)e.getSource()).addMouseListener(new MouseAdapter() {...});
}

因此,您将调用附加到该按钮的每个监听器。

另一方面,如果目标是根据按下的鼠标按钮增加/减少某些计数变量,那么您根本不需要 ActionListener:只需添加一次鼠标监听器,然后就是这样:

JButton button = new JButton("1");
button.addMouseListener(new MouseAdapter() {...});

但是,在我看来,最好的方法是使用两个按钮,实现两个不同的操作并忘记鼠标监听器。

关于Java MouseEvent 在 actionPerformed 内单击鼠标左键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26179170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com