我有:
当点击pix [i]时 - JFrame必须图标化,并且在屏幕的任何一点下一次点击必须完全改变textField(pix [i])而不影响另一个textFields,然后框架必须标准化并且之后任何鼠标点击(不在textField上)不能影响这些元素。
使用jnativehook库处理JFrame外部的点击。
这部分代码在这里:
for (int i = 0; i < pix.length; i++){
int tmp = i;
pix[i].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
setState(Frame.ICONIFIED);
GlobalScreen.addNativeMouseListener(new NativeMouseAdapter(){
public void nativeMouseClicked(NativeMouseEvent e){
pixelChoose(pix[tmp]);
setState(Frame.NORMAL);
}
});
}
});
P.S。:我试过用
GlobalScreen.removeNativeMouseListener(new NativeMouseAdapter() {
public void nativeMouseClicked(NativeMouseEvent e) {
}
});
但实际上并不知道如何正确使用它。
P.S. [2]:如果您对该问题有另一种解决方案,欢迎您将其输入答案 - 它会很棒:&gt;
修改<!/强> 我很吵,现在我在这里解决方案:
NativeMouseAdapter adapter = new NativeMouseAdapter(){
public void nativeMouseClicked(NativeMouseEvent e){
pixelChoose(pix[tmp]);
setState(Frame.NORMAL);
GlobalScreen.removeNativeMouseListener(this);
}
};
MouseListener listener = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
setState(Frame.ICONIFIED);
GlobalScreen.addNativeMouseListener(adapter);
}
};
pix[i].addMouseListener(listener);
答案 0 :(得分:1)
添加(在setState之后)代码以删除MouseListener。
setState(Frame.NORMAL);
for (int i = 0; i < pix.length; i++){
pix[i].removeMouseListener(MouseAdapter::this);
}
pix
必须是最终的,我希望MouseAdapter ::这适用于匿名的MouseListener。
MouseAdapter ::此失败
而不是
pix[i].addMouseListener(new MouseAdapter() {
将MouseListener保存在自己的变量中:
MouseListener cat = new MouseAdapter() { ... };
pix[i].addMouseListener(cat);
后来在内部回调做了
pix[i].removeMouseListener(cat);
答案 1 :(得分:0)
在您创建鼠标侦听器的代码中,您需要保留引用。
NativeMouseAdapter adapter = new NativeMouseAdapter(){
public void nativeMouseClicked(NativeMouseEvent e){
pixelChoose(pix[tmp]);
setState(Frame.NORMAL);
}
}
GlobalScreen.addNativeMouseListener(adapter);
然后,当您想要删除它时,使用该引用。
GlobalScreen.removeNativeMouseListener(adapter);
答案 2 :(得分:0)
NativeMouseAdapter adapter = new NativeMouseAdapter(){
public void nativeMouseClicked(NativeMouseEvent e){
pixelChoose(pix[tmp]);
setState(Frame.NORMAL);
GlobalScreen.removeNativeMouseListener(this);
}
};
MouseListener listener = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
setState(Frame.ICONIFIED);
GlobalScreen.addNativeMouseListener(adapter);
}
};
pix[i].addMouseListener(listener);