我有一个网格,当我左键点击,按住并移动光标(即:拖动鼠标)时,方框变成红色(我基本上想绘制网格)。我有下面的代码。当我拖动鼠标的时候。MouseDragged方法被正确调用,但是只有一个框变成红色,并且在我拖动之后什么也没有发生(尽管该方法仍然被调用)。有什么想法吗?希望我说得够清楚了。谢谢
public static class DragListener implements MouseMotionListener
{
@Override
public void mouseDragged(MouseEvent me) {
JPanel current =(JPanel)me.getSource();
current.setBackground(Color.RED);
}
}以下是栅格的定义:
public static class GridPane extends JPanel {
public GridPane(int row, int col) {
int count = 0 ;
setLayout(new GridLayout(row, col));
setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
for (int i = 1; i <= (row * col); i++) {
JPanel lab = new JPanel();
lab.setEnabled(true);
lab.setBackground(Color.WHITE);
lab.setPreferredSize(new Dimension(3, 3));
lab.setBorder(BorderFactory.createLineBorder(Color.BLACK));
lab.addMouseMotionListener(new DragListener());
lab.addMouseListener(new ClickListener());
lab.setName(count+"");
++count;
add(lab);
}
}
}发布于 2012-01-28 10:23:14
你需要这样的东西
public MouseMotionEventDemo() {
addMouseMotionListener(this);
setVisible(true);
}
public void mouseMoved(MouseEvent me) {
mX = (int) me.getPoint().getX();
mY = (int) me.getPoint().getY();
repaint();
}
public void mouseDragged(MouseEvent me) {
mouseMoved(me);
}发布于 2012-01-31 04:07:40
我认为你的问题源于你在多个JPanels上拖拽鼠标的事实,以及java如何识别拖拽。Java通过以下算法识别拖动:
在单个组件“c”中:
内拖动
因为您的鼠标最终会离开一个组件,并在按下时进入第二个组件,所以第二个组件永远不会注册mousePressed操作,因此它不会认为您正在拖动鼠标。我建议保留一些标记,当鼠标在任何“实验室”JPanels (mousePressed())中被按下时通知GridPane,然后实现mouseMoved()方法来检查该标记和颜色(如果已经设置)。然后实现mouseReleased()将您的标志重置回正常状态,以便在停止拖动后不再继续着色。
有关Java语言中鼠标运动的更多信息,请查看此链接:http://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html
https://stackoverflow.com/questions/9042373
复制相似问题