【发布时间】:2018-08-18 20:54:23
【问题描述】:
在面板中,我有 10*10 的切换按钮。我的目标是做这个活动: 如果鼠标左键按下并且鼠标悬停在特定按钮上,则调用“单击按钮”行。因此用户可以轻松选择(点击)多个按钮。
这不起作用(移动鼠标时更改相同的按钮而不是更改另一个按钮):
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JToggleButton;
public class ButtonClickOnHover {
public void clickOnButtonOnHover(JToggleButton button) {
button.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseMoved(MouseEvent e) {
}
@Override
public void mouseDragged(MouseEvent e) {
button.doClick(0);
}
});
}
}
试过了,没用(他的实现有什么问题?):
import java.awt.Color;
import java.awt.Component;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.SwingUtilities;
public class ButtonClickOnHover {
public void clickOnButtonOnHover(JPanel panel) {
panel.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseMoved(MouseEvent e) {
}
@Override
public void mouseDragged(MouseEvent e) {
Point location = MouseInfo.getPointerInfo().getLocation();
JPanel parent = (JPanel) e.getComponent();
SwingUtilities.convertPointFromScreen(location, parent);
Component mouseOver = parent.findComponentAt( location );
if (mouseOver instanceof JToggleButton)
{
JToggleButton button = (JToggleButton)mouseOver;
button.setBackground( Color.YELLOW );
}
}
});
}
}
【问题讨论】:
-
不确定我是否理解这个概念。当您在切换按钮上拖动鼠标时,您将不断为切换按钮生成 mouseDragged 事件,这意味着您将继续为您移动的每个像素调用 doClick() 方法。
-
我只想为当前悬停的按钮调用 doClick()。
-
但是如果代码将按钮的背景颜色更改为黄色,而不是 doClick() 对我来说也可以(这样我们就可以避免切换按钮开/关问题)
-
所以您希望能够选择一个区域并触发其中的按钮?
-
@lipilocid,你做过调试吗?您是否在代码中添加了任何 System.out.println(..) 语句以查看您的代码是否正在执行?发布正确的minimal reproducible example 来证明您的问题。