在netbeans中,会自动为组件创建鼠标侦听器。
private void initComponents() {
jLabel9 = new javax.swing.JLabel();
jLabel9.setBackground(new java.awt.Color(150, 192, 206));
jLabel9.setOpaque(true);
jLabel9.setPreferredSize(new java.awt.Dimension(150, 150));
jLabel9.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jLabel9MouseClicked(evt);
}
public void mouseEntered(java.awt.event.MouseEvent evt) {
jLabel9MouseEntered(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
jLabel9MouseExited(evt);
}
});问题是如何通过函数删除鼠标单击事件的侦听器?我试着做这样的事情:
void rem(){
jLabel9.removeMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jLabel9MouseClicked(evt);
}
});
}然后,我将按照我的程序流的要求调用这个函数。但这不管用。有一件事我已经弄清楚了(尽管我不确定这一点),这是不起作用的,因为我没有通过原来的适配器删除侦听器。相反,我正在创建一个新的监听器,并试图删除原来的侦听器。我在谷歌上搜索了几乎每一个有效的链接,但是没有任何帮助。
发布于 2017-01-27 17:13:47
您的MouseListener引用在哪里?您使用的是匿名MouseListener。您自己发现正在删除removeMouseListener()方法中的一个新的removeMouseListener()。为什么?因为您不能再访问原始侦听器了。为它创建一个参考,你的问题就解决了。
MouseListener mListener = new MouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jLabel9MouseClicked(evt);
}
public void mouseEntered(java.awt.event.MouseEvent evt) {
jLabel9MouseEntered(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
jLabel9MouseExited(evt);
}
});
jLabel9.addMouseListener(mListener);
jLabel9.removeMouseListener(mListener);可供选择的解决方案,但第一种解决方案要容易得多:
MouseListener[] mListener = jLabel9.getMouseListeners();
for (MouseListener ml : mListener) {
jLabel9.removeMouseListener(ml);
}发布于 2017-01-27 17:19:12
就像佐尔特·贝尔说的那样。类测试{
JLabel jLabel9 = new JLabel();
MouseAdapter adapter = new MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jLabel9MouseClicked(evt);
}
public void mouseEntered(java.awt.event.MouseEvent evt) {
jLabel9MouseEntered(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
jLabel9MouseExited(evt);
}
};
private void initComponents() {
jLabel9 = new javax.swing.JLabel();
jLabel9.setBackground(new java.awt.Color(150, 192, 206));
jLabel9.setOpaque(true);
jLabel9.setPreferredSize(new java.awt.Dimension(150, 150));
jLabel9.addMouseListener(adapter);
}
void rem() {
jLabel9.removeMouseListener(adapter);
}https://stackoverflow.com/questions/41898587
复制相似问题