在netbeans中,会自动为组件创建一个鼠标侦听器。
SQL>SELECT RIGHT('abcd',1) AS rightmost_char;
rightmost_char
--------------
d
问题是如何通过函数删除鼠标单击事件的侦听器?我想做这样的事情:
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);
}
});
然后我按照程序流程的要求调用此函数。但这不起作用。我想通过的一件事(虽然我不确定)是因为我没有通过原始适配器删除监听器,所以这不起作用。相反,我正在创建一个新的并尝试删除原始侦听器。我几乎搜索了谷歌上的每个有效链接但没有帮助。
答案 0 :(得分:1)
您的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);
}
答案 1 :(得分:0)
几乎就像ZsoltÉbel所说的那样。 class Test {
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);
}