永发信息网

会JAVA的就进吧~鼠标事件提问

答案:2  悬赏:20  手机版
解决时间 2021-12-29 11:02
使得当鼠标在窗口中点击任何位置时
,都会将按钮放在以点击位置为中心的位置,并在文
本域中显示中心位置的坐标。

import java.awt.*;
import java.awt.event.*;
import javax.swing.SwingUtilities;

public class A{

public static void main(String[] args) {
MyWindow myWin = new MyWindow("鼠标运动事件测试");

}

}

class MyWindow extends Frame implements MouseListener{
Button b;
TextArea ta;

MyWindow(String s){
super(s);
setLayout(new FlowLayout());
setBounds(200, 100, 600, 300);
b = new Button("按钮");
add(b);
ta = new TextArea();
add(ta);
b.addMouseListener(this);
ta.addMouseListener(this);
addMouseListener(this);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
setVisible(true);
validate();
}

public void mouseMoved(MouseEvent e){}
public void mouseClicked(MouseEvent e){
ta.append("鼠标点击,位置"+"("+e.getX()+","+e.getY()+")\n");
}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){
Component c =(Component)e.getSource(); //这句话什么意思??
e = SwingUtilities.convertMouseEvent(c,e,this); // 这个又是什么意思??
int x,y,w,h;
x = e.getX();
y = e.getY();
w=c.getSize().width;
h=c.getSize().height;
c.setLocation(x-w/2,y-h/2);
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}

}

我发现这里移动的位置完全不对,应该怎么改?
最佳答案
Component c = (Component) e.getSource(); // 这句话什么意思?? 获得时间初始发生在哪个控件(Object)上。
e = SwingUtilities.convertMouseEvent(c, e, this); // 这个又是什么意思??
e = SwingUtilities.convertMouseEvent(c, e, this); // 这个又是什么意思?? 将在c (component)上发生的事件 传到 另个一个component 上

我发现这里移动的位置完全不对,应该怎么改? 稍后贴代码

import java.awt.*;
import java.awt.event.*;
import javax.swing.SwingUtilities;

public class A {

public static void main(String[] args) {
MyWindow myWin = new MyWindow("鼠标运动事件测试");

}

}

class MyWindow extends Frame implements MouseListener {
Button b;
TextArea ta;
MyWindow(String s) {
super(s);
setLayout(new FlowLayout());
setBounds(200, 100, 600, 300);
b = new Button("按钮");
add(b);
ta = new TextArea();
add(ta);
b.addMouseListener(this);
ta.addMouseListener(this);
addMouseListener(this);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setVisible(true);
validate();
}

public void mouseMoved(MouseEvent e) {
}

public void mouseClicked(MouseEvent e) {
ta.append("鼠标点击,位置" + "(" + e.getX() + "," + e.getY() + ")\n");
}

public void mousePressed(MouseEvent e) {
}

public void mouseReleased(MouseEvent e) {
Component c = (Component) e.getSource(); // 这句话什么意思??
e = SwingUtilities.convertMouseEvent(c, e, this); // 这个又是什么意思??
int x, y, w, h;
x = e.getX();
y = e.getY();
w = c.getSize().width;
h = c.getSize().height;
b.setLocation(x, y);
//c.setLocation(x - w / 2, y - h / 2);
}

public void mouseEntered(MouseEvent e) {
}

public void mouseExited(MouseEvent e) {
}
全部回答
你的判断有问题。 将 if(current==null) { int x=event.getx(); int y=event.gety(); current.setframe(x-a/2, y-a/2, a, a); repaint(); system.out.println("dragged"); } 改成: if(current!=null) { int x=event.getx(); int y=event.gety(); current.setframe(x-a/2, y-a/2, a, a); repaint(); system.out.println("dragged"); } 然后用鼠标抓取窗口就可以打印dragged。 理由:在mouseframe的构造器中,调用了add(),而add()方法执行过了那么current就不可能为空了。所以你的if(current==null)始终为false,故一直走不到判断里面的语句。就算current真的为null,那么判断中的current.setframe(x-a/2, y-a/2, a, a)也会报空指针异常了。 希望能帮到你。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
平鲁区安全生产监督管理局在什么地方啊,我要
排列句子顺序.(在括号里填序号)好的加高分!
骨裂夹板要多久可以拆
母蟋蟀为什么会叫
运城市盐湖区安全生产监督管理局位置在什么地
2010年10月9日,国家发改委就《关于居民生活
0.02000精确到________,有________个有效数
中星6B的信号不稳定怎么办
忻州市忻府区安全生产监督管理局地址在什么地
怎么从三明到江苏盐城最快又实惠
翩是什么结构
原平市安全生产监督管理局办公位置在哪啊?好
miui-jhfcnbl28.0是什么?
北御堂地址在哪,我要去那里办事
阴面的房间为什么这么冷
推荐资讯
杭州到西安动车几个小时
投机的反义词是什么
广州到合肥大巴要多长时间。我是下午7点多的
细节决定什么排比句
欧诗漫和佰草集哪个好
什么针引线,什么上添花,什么冠禽兽,什么月
农村,黄牛和水牛哪个价钱高?哪个好出售?哪
单选题Everybody thinks little o
抽签遇人不淑的意思
已知:抛物线的解析式为y=-2(x+4)(x-1).
羊角可以做什么
前男友发表动态:如果现在相识,定能互相理解
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?