首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MouseListener MouseDragged未按预期工作

问MouseListener MouseDragged未按预期工作
EN

Stack Overflow用户
提问于 2012-01-28 10:08:23
回答 2查看 3K关注 0票数 0

我有一个网格,当我左键点击,按住并移动光标(即:拖动鼠标)时,方框变成红色(我基本上想绘制网格)。我有下面的代码。当我拖动鼠标的时候。MouseDragged方法被正确调用,但是只有一个框变成红色,并且在我拖动之后什么也没有发生(尽管该方法仍然被调用)。有什么想法吗?希望我说得够清楚了。谢谢

代码语言:javascript
复制
public static class DragListener implements MouseMotionListener
{



    @Override
    public void mouseDragged(MouseEvent me) {


            JPanel current =(JPanel)me.getSource();

            current.setBackground(Color.RED);

    }
  }

以下是栅格的定义:

代码语言:javascript
复制
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);
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2012-01-28 10:23:14

你需要这样的东西

代码语言:javascript
复制
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);
  }
票数 0
EN

Stack Overflow用户

发布于 2012-01-31 04:07:40

我认为你的问题源于你在多个JPanels上拖拽鼠标的事实,以及java如何识别拖拽。Java通过以下算法识别拖动:

在单个组件“c”中:

  1. 在"c“
  2. 内按下鼠标,然后在”c“内移动鼠标-这构成了在"c"

内拖动

因为您的鼠标最终会离开一个组件,并在按下时进入第二个组件,所以第二个组件永远不会注册mousePressed操作,因此它不会认为您正在拖动鼠标。我建议保留一些标记,当鼠标在任何“实验室”JPanels (mousePressed())中被按下时通知GridPane,然后实现mouseMoved()方法来检查该标记和颜色(如果已经设置)。然后实现mouseReleased()将您的标志重置回正常状态,以便在停止拖动后不再继续着色。

有关Java语言中鼠标运动的更多信息,请查看此链接:http://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9042373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档