删除 netbeans 中的鼠标侦听器
Removing mouse listener in netbeans
在 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);
}
});
}
然后我按照程序流程的要求调用这个函数。但这不起作用。我已经弄清楚的一件事(虽然我不确定)是这不起作用,因为我没有通过原始适配器删除侦听器。相反,我正在创建一个新的并试图删除原来的听众。我几乎搜索了 google 上所有有效的 link,但 none 有帮助。
您的 MouseListener 引用在哪里?您正在使用匿名 MouseListener。您自己发现要在 removeMouseListener()
方法中删除一个新的 MouseListener。为什么?因为您无法再访问您的原始侦听器。为它创建一个引用,你的问题就解决了。
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);
}
几乎就像 Zsolt Ébel 说的那样。
class 测试 {
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);
}
在 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);
}
});
}
然后我按照程序流程的要求调用这个函数。但这不起作用。我已经弄清楚的一件事(虽然我不确定)是这不起作用,因为我没有通过原始适配器删除侦听器。相反,我正在创建一个新的并试图删除原来的听众。我几乎搜索了 google 上所有有效的 link,但 none 有帮助。
您的 MouseListener 引用在哪里?您正在使用匿名 MouseListener。您自己发现要在 removeMouseListener()
方法中删除一个新的 MouseListener。为什么?因为您无法再访问您的原始侦听器。为它创建一个引用,你的问题就解决了。
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);
}
几乎就像 Zsolt Ébel 说的那样。 class 测试 {
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);
}