我想只有利用鼠标事件里的新坐标得到位移量,然后刷新界面,然后在新的位置drawImage。处理不好,会闪的。

解决方案 »

  1.   

    曾经写过一个空当接龙,要的话可以给你,是基于《java图形编程awt篇》上的一个很小的双缓冲贴图程序写的。
    不过空当接龙好像不是拖着一个图片在窗体内移动吧,纸牌才这样。
      

  2.   

    哦,我想把当空接龙作成纸牌那样拖动的形式。
    我的e-mail:[email protected] 多谢 miwoo(miwoo),受到后马上结帖!
      

  3.   

    不是说swing组件都实现了双缓冲嘛
      

  4.   

    能不能给我一份:
    [email protected]
      

  5.   

    把图片图在JLabel中,拖动一个标签是不是很方便呢
    因为图片是没有句柄的拖动最好的办法是转换坐标原点我有代码,自定义可拖动的标签
    class CustomJLabel extends JLabel{
        private int offsetX, offsetY;    
    public CustomJLabel(){
            //完成控件本身的拖动的功能
    addMouseListener(PressedMouseListener);

             //完成鼠标拖动控件的动作
    addMouseMotionListener(CustomMouseMotionListener);
        }
     //鼠标单击时记录点击位置坐标,自定义MouseListener监听器
      protected MouseListener PressedMouseListener = new MouseAdapter() {
      public void mousePressed(MouseEvent e) {
     if(e.getButton()==MouseEvent.BUTTON1){//左键时才有效
      offsetX = e.getX();
      offsetY = e.getY();
      //System.out.println(offsetX+" "+offsetY);
     }
      }
      };     //鼠标拖拽控件监听器
      protected MouseMotionListener CustomMouseMotionListener =
      new MouseMotionAdapter() {
      public void mouseDragged(MouseEvent e) {
      //如果鼠标超出了父容器,则不再移动,也锁定鼠标
      if(e.getModifiers()==16){ //左键时才有效
       if (!getParent().contains(
      e.getX() + (int) getLocation().getX(),
      e.getY() + (int) getLocation().getY())) {
      //锁定鼠标光标
      try {
      Robot robot = new java.awt.Robot();
      Point p = getLocationOnScreen();
      robot.mouseMove(p.x + offsetX, p.y + offsetY);
      } catch (AWTException ae) {
      }
      return;
    }
      int currentX=e.getX() + (int) getLocation().getX() - offsetX;
      int currentY=e.getY() + (int) getLocation().getY() - offsetY;
      
      //超出左上就不在移动
      //int tmp_X=(currentX<=0)?0:currentX;
      //int tmp_Y=(currentY<=0)?0:currentY;
      
      //m_Point 的校正偏移量
      //int off_X=(currentX<=0)?currentX:0;
      //int off_Y=(currentY<=0)?currentY:0;
      
      setLocation(currentX,currentY);
      //setLocation(tmp_X,tmp_Y);
      //e.getX() + (int) getLocation().getX() - offsetX,
      //e.getY() + (int) getLocation().getY() - offsetY);
      
      //重设节点的m_Point;
      //m_Point.x=m_Point.x+e.getX()-offsetX;
      //m_Point.y=m_Point.y+e.getY()-offsetY;
      
      //更新所有的链接
    //   //NetNode.this.notifyAllLinks();
      
      //拖动的时候调用主面板的paint()
      //UIMainPanel.getInstance().repaint();
      }
      }
      };  
    }
      

  6.   

    多谢miwoo(miwoo)和kypfos(中国,怎么啦) 
    我要做一个和http://xajh.dfm-xf.com.cn/kdjl1/index.html相当的当空接龙,其中最重要的是定义我的拖动类!