mousereleased事件的一个疑问 我通过debug调试一个程序,发现每次执行完mousereleased以后,会有2种情况的跳跃。一种跳到了Component.class下的processMouseEvent方法,另一种跳到了AWTEventMulticaster.class下的mouseReleased方法,其中第二种方法会导致mousereleased这个事件被重复调用。这是什么原因呢。求高手解答!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为还有 mouseClicked 事件之所以有的时候这样,有的时候不是这样是因为 mouseClicked 要求鼠标按下与松开在同一坐标不是每次都会触发mouseReleased 中执行的代码不会因为这样重复调用的 根据我提的问题,写了个测试代码,大家可以实践用一下;刚开始单击绿色地方,只打印一个1.之后每点击按钮一次,单击绿色地方时所打印的1会多一个。分别调试会出现我上面所说的问题。import java.awt.Color;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;public class B extends JFrame implements ActionListener{ private Container pane=null; private JButton jb=new JButton("123"); public void aa(){ } public B(){ setSize(300, 300); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pane = this.getContentPane(); pane.setLayout(null); pane.setBackground(new Color(0, 112, 26)); jb.setBounds(100,100,60,20); pane.add(jb); jb.addActionListener(this); new A(this); } public static void main(String[] args) { new B(); } public void actionPerformed(ActionEvent e) { new A(this); } }import java.awt.Container;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;public class A { private Container pane=null; public A(B b){ this.pane=b.getContentPane(); pane.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e){ System.out.println(1); } }); }} god.....你每点击一次按钮就会new A(this);然后就给你的pane添加了一个新的mouseListener...mouseListener可以叠加的在Component中表现为一个mouseListener数组当然每点一次按钮之后,就会造成多次打印了啊你多点几次按钮试试,一下打印一堆出来 哦,理解了。刚刚试了试解决方法,在add前加了个removeMouseListener,可还是有这个情况。这个测试程序是我从项目中分离出的,必须这样做,有什么解决方法么? 如果只能改A那:import java.awt.Container;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;public class A { private Container pane=null; public A(B b){ this.pane=b.getContentPane(); if (pane.getMouseListeners().length == 0) { pane.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e){ System.out.println(1); } }); } }} 如果只能改B,那import java.awt.Color;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;public class B extends JFrame implements ActionListener{ private Container pane=null; private JButton jb=new JButton("123"); public void aa(){ } public B(){ setSize(300, 300); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pane = this.getContentPane(); pane.setLayout(null); pane.setBackground(new Color(0, 112, 26)); jb.setBounds(100,100,60,20); pane.add(jb); jb.addActionListener(this); new A(this); } public static void main(String[] args) { new B(); } public void actionPerformed(ActionEvent e) { //new A(this);不要每次都new一个A } } 类的 .class 属性(如 Byte.class) 请教是什么意思? 如何再JEditorPane中设置其中文字字体和颜色。 Servlet的doPost方法中得不到Url中的参数吗? elcipse rcp程序的视图问题 新手上路,请指条明路 在LINUX下有没有类似于Access的数据库,只要拷贝就能用 请问在哪里能下载都这些东西!(散分了~~) 在浏览器中按一下按钮,图标向右移动,如何做。 java初学者的疑问 resultset 如何创建存在于内存中文件,而不存在在实际硬盘上 java调用C# webservice接口
之所以有的时候这样,有的时候不是这样
是因为 mouseClicked 要求鼠标按下与松开在同一坐标
不是每次都会触发
mouseReleased 中执行的代码不会因为这样重复调用的
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
public class B extends JFrame implements ActionListener{ private Container pane=null;
private JButton jb=new JButton("123");
public void aa(){
}
public B(){
setSize(300, 300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane = this.getContentPane();
pane.setLayout(null);
pane.setBackground(new Color(0, 112, 26));
jb.setBounds(100,100,60,20);
pane.add(jb);
jb.addActionListener(this);
new A(this);
}
public static void main(String[] args) {
new B();
}
public void actionPerformed(ActionEvent e) {
new A(this);
}
}import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class A { private Container pane=null;
public A(B b){
this.pane=b.getContentPane();
pane.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e){
System.out.println(1);
}
});
}
}
你每点击一次按钮就会
new A(this);
然后就给你的pane添加了一个新的mouseListener...
mouseListener可以叠加的
在Component中表现为一个mouseListener数组当然每点一次按钮之后,就会造成多次打印了啊
你多点几次按钮试试,一下打印一堆出来
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class A { private Container pane=null;
public A(B b){
this.pane=b.getContentPane();
if (pane.getMouseListeners().length == 0) {
pane.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e){
System.out.println(1);
}
});
}
}
}
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
public class B extends JFrame implements ActionListener{ private Container pane=null;
private JButton jb=new JButton("123");
public void aa(){
}
public B(){
setSize(300, 300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane = this.getContentPane();
pane.setLayout(null);
pane.setBackground(new Color(0, 112, 26));
jb.setBounds(100,100,60,20);
pane.add(jb);
jb.addActionListener(this);
new A(this);
}
public static void main(String[] args) {
new B();
}
public void actionPerformed(ActionEvent e) {
//new A(this);不要每次都new一个A
}
}