以下是一本教材上讲这个时的源码:import java.awt.*;
import java.awt.event.*;
import javax.swing.SwingUtilities;
class Win extends Frame implements MouseListener,MouseMotionListener
{ Button button;
TextField text;
int x,y;
boolean move=false;
Win()
{ button=new Button("用鼠标拖动我");
text=new TextField("用鼠标拖动我",8);
button.addMouseListener(this);
button.addMouseMotionListener(this);
text.addMouseListener(this);
text.addMouseMotionListener(this);
addMouseMotionListener(this);
setLayout(new FlowLayout());
add(button);
add(text);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
setBounds(10,10,350,300);
setVisible(true);
validate();
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e)
{
move=false;
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseClicked(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
public void mouseDragged(MouseEvent e)
{ Component com=null;
if(e.getSource() instanceof Component)
{ com=(Component)e.getSource();
if(com!=this)
move=true;
e=SwingUtilities.convertMouseEvent(com,e,this);
if(move)
{ x=e.getX();
y=e.getY();
int w=com.getSize().width,
h=com.getSize().height;
com.setLocation(x-w/2,y-h/2);
}
}
}
}
public class Example7_30
{ public static void main(String args[])
{ Win win=new Win();
}
}
我就是不明白转移鼠标事件到窗口的那句话到底有什么作用?拖动跟窗口有什么关系呢?谢谢大家了
import java.awt.event.*;
import javax.swing.SwingUtilities;
class Win extends Frame implements MouseListener,MouseMotionListener
{ Button button;
TextField text;
int x,y;
boolean move=false;
Win()
{ button=new Button("用鼠标拖动我");
text=new TextField("用鼠标拖动我",8);
button.addMouseListener(this);
button.addMouseMotionListener(this);
text.addMouseListener(this);
text.addMouseMotionListener(this);
addMouseMotionListener(this);
setLayout(new FlowLayout());
add(button);
add(text);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
setBounds(10,10,350,300);
setVisible(true);
validate();
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e)
{
move=false;
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseClicked(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
public void mouseDragged(MouseEvent e)
{ Component com=null;
if(e.getSource() instanceof Component)
{ com=(Component)e.getSource();
if(com!=this)
move=true;
e=SwingUtilities.convertMouseEvent(com,e,this);
if(move)
{ x=e.getX();
y=e.getY();
int w=com.getSize().width,
h=com.getSize().height;
com.setLocation(x-w/2,y-h/2);
}
}
}
}
public class Example7_30
{ public static void main(String args[])
{ Win win=new Win();
}
}
我就是不明白转移鼠标事件到窗口的那句话到底有什么作用?拖动跟窗口有什么关系呢?谢谢大家了
public static MouseEvent convertMouseEvent(Component source,
MouseEvent sourceEvent,
Component destination)返回类似于 sourceEvent 的 MouseEvent,除了其 x 和 y 成员已转换到 destination 的坐标系统。如果 source 为 null,则假定已将 sourceEvent x 和 y 成员转换到 destination 的根组件坐标系统。如果 destination 为 null,则返回的 MouseEvent 将位于 source 的坐标系统中。sourceEvent 不会更改。返回一个新事件。返回事件的 source 字段将被设置为 destination。如果目标为非 null,则在不更改源的情况下使用 translateMouseEvent() 方法将鼠标事件从一个组件转换到另一个组件。
{ Component com=null;
if(e.getSource() instanceof Component)//判断鼠标事件的来源是不是Component的子类
{ com=(Component)e.getSource(); //强制转换
if(com!=this) //如果com不是Frame,则move为true
move=true;
e=SwingUtilities.convertMouseEvent(com,e,this); //使得鼠标事件获得com在当前Frame中,对应的坐标值
if(move)//把被拖的Component移动的鼠标拖动的末位置
{ x=e.getX();
y=e.getY();
int w=com.getSize().width,
h=com.getSize().height;
com.setLocation(x-w/2,y-h/2);
}
}
}