当前位置:  技术问答>java相关

拖动与重画

    来源: 互联网  发布时间:2015-10-27

    本文导语:  我要做一个应用, 以下是我抄谁的代码:运行结果为:拖动矩形,留下所有拖动痕迹。恢复注释部分,拖动矩形看到轨迹,但不会留下痕迹。 现在的问题是:我不想自己编movepaint();即擦除所有原有图形的函数。因为...

我要做一个应用,
以下是我抄谁的代码:运行结果为:拖动矩形,留下所有拖动痕迹。恢复注释部分,拖动矩形看到轨迹,但不会留下痕迹。
现在的问题是:我不想自己编movepaint();即擦除所有原有图形的函数。因为这个函数很复杂。但如果没有movepaint();在拖动中一定会留下拖动痕迹。按理说,repaint()函数会自动清屏,可在鼠标拖动的事件中,它就是不会清屏。
麻烦哪位老大改一下以下的程序,不用movepaint();达到拖动的效果。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.io.*;
import java.util.*;

public class MyGame
{
public static void main(String[] args)
{
JFrame mygame=new MyGameFrame();
mygame.show();
}
}

class MyGameFrame extends JFrame
{

MyPanel MyPanelObject=new MyPanel();
public MyGameFrame()
{
setTitle("拖动测试·");
setSize(600,400);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
});
Container contentPane=getContentPane();
contentPane.add(MyPanelObject);
}
}


class MyPanel extends JPanel implements MouseMotionListener, MouseListener
{
public static int curx=10,cury=10,newx,newy;
private Point lastPoint;
public MyPanel()
{ addMouseMotionListener(this);
addMouseListener(this);
}

public boolean isFocusTraversable()
{
return(true);
}


public void paint(Graphics g)
{
//movepaint(g,curx,cury);//用来消除上一次的痕迹
g.drawRect(newx,newy,25,25);
curx=newx;
cury=newy;
}

private void movepaint(Graphics g,int x,int y)
{ if(lastPoint==null)
return;
g.setXORMode(this.getBackground());
g.setColor(Color.black);
g.drawRect(x,y,25,25);
}
public void mouseDragged(MouseEvent e)
{
//System.out.println("Dragged");
if(binside)
{
newx = newx + e.getX()-lastPoint.x;
newy = newy + e.getY()-lastPoint.y;
lastPoint=e.getPoint();
invalidate();
repaint();
}

}

boolean binside;
public void mousePressed(MouseEvent parm1) 
{
    if(isInsideObject(parm1.getPoint()))
lastPoint=parm1.getPoint();
}


private boolean isInsideObject(Point pt)
{
int cx=newx+25/2;
int cy = newy+25/2;
int xdif=pt.x-cx;
int ydif=pt.y-cy;
double fdis=xdif*xdif+ydif*ydif;
fdis=Math.sqrt(fdis);
if(fdis>25/2)
binside= false;
else
binside=true;
return binside;
}
}

|
其实可以用另一个思路,比如放入一个Canvas图板,在Canvas上画一个正方形,无须重画它,只须改变Canvas的位置就能够得到拖动的效果了,用到方法
setBounds(int x,int y,int width,int height);

|
up

|
被楼主搞糊涂了……

|
rui

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • media player中怎么不能拖动滚动条了??
  • jQuery EasyDrag实现DIV拖动
  • 可拖动的Tab控件 Draggable Tabs
  • qt窗体程序调用什么方法,对拖动到该窗体的文件进行处理
  • c# Winform 全窗口拖动的代码
  • 如何控制Frame中的组件大小,当用鼠标拖动改变frame大小时
  • 我的win2003为何不能放音乐?服务也开了,任务栏里的喇叭上下拖动也有声!
  • c#实现无标题栏窗口的拖动
  • redhat7.3是不是有问题??为什么在拖动窗口的时候容易死机??怎么避免??
  • JBuilder中如何拖动控件到面板,位置放置的问题。(高手指教)
  • 如果解决jTable中滚动条拖动后花屏的问题》?
  • C# Winform 整个窗口拖动的实现代码
  • 当一个窗口显示后,用鼠标拖动它的大小,怎样找到相应的事件处理函数?
  • JBuiler6的问题:拖动编辑区右侧的滚动条时,代码重叠的乱七八糟,这是怎么回事啊?:(
  • 在IE下拖动滚动条时border消失的解决方法
  • C# Winform 让整个窗口都可以拖动
  • 窗体拖动问题!!
  • 请帮帮我!我在jbuilder6中拖动鼠标时有些问题!
  • redhat9,我使用桌面怎么有的程序窗口老是在显示器外,拖动也看不全?
  • 请问怎样在Linux的X中只通过键盘就拖动窗口?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3