【发布时间】:2017-11-15 15:16:55
【问题描述】:
我一直在尝试制作一个锁屏程序,它是一个包含多个 JPanel 的 JFrame。我在每个面板(单元格)类中添加了一个 MouseMotionListener。我想要它,以便用户可以拖动鼠标并能够拖动到多个单元格中。问题是 MouseEvent.GetSource (投射到一个单元格)只返回拖动开始的单元格。这是我的代码。
public class Cell extends JPanel {
public String name;
public Cell(String name, Color color) {
this.name = name;
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
onMouseOver(e);
}
});
setBackground(color);
setVisible(true);
repaint();
}
private void onMouseOver(MouseEvent e) {
System.out.println(name);
}
}
【问题讨论】:
-
你能解释一下“拖入多个单元格”吗?
-
@Berger 我的意思是把鼠标从一个单元格拖到另一个单元格。
-
所以你想要在拖动过程中悬停的所有单元格?
-
@Berger 是的,到目前为止,它只返回拖动移动开始的单元格。我不认为我做错了什么,因为 javadoc (docs.oracle.com/javase/7/docs/api/java/awt/event/…) 说无论鼠标是否在组件范围内,它都不会更改单元格。我需要某种替代方法。
-
您可以在
Cell中添加boolean selected;,然后当单元格收到mouseDragged时,将此值设置为true。最后,当您需要整个列表时,检查每个单元格的selected值。
标签: java swing drag-and-drop