import java.awt.event.*;
import java.net.URL;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.*;
//游戏界面
public class w3{
public w3(){
JFrame j=new JFrame();
Container c=j.getContentPane();
/*
//游戏面板对象
w7 yxmb=new w7();
//添加游戏面板
for(int i=0;i<17;i++){
j.add(yxmb.a[i]);
}
*/
j.setSize(1000, 600);
j.setUndecorated(true);//窗体无边框
j.setDefaultCloseOperation(2);//窗体关闭方式
j.setLocationRelativeTo(null);//窗体居中
j.setResizable(false);//用户禁止拉伸窗体
j.setLayout(null);
j.setVisible(true);//窗体可见
j.requestFocus();
KeyboardFocusManager m=KeyboardFocusManager.getCurrentKeyboardFocusManager();
m.addKeyEventDispatcher(new YourDispatcher());
}//w3构造方法
//全局键盘监听
public class YourDispatcher implements KeyEventDispatcher{
w4 w1=new w4();//另一个窗体类
w5 w2=new w5();
boolean b1=true;//开关状态变量
boolean b2=true;
public boolean dispatchKeyEvent(KeyEvent e){
switch(e.getKeyCode()){
case KeyEvent.VK_ESCAPE:
//开关
if(b1){
w1.j.setVisible(true);
b1=false;
}else{
w1.j.setVisible(false);
b1=true;
}
break;
case KeyEvent.VK_I:
if(b2){
w2.j.setVisible(true);
b2=false;
}else{
w2.j.setVisible(false);
b2=true;
}
break;
}
/*
if(e.getKeyCode() == KeyEvent.VK_ESCAPE){
if(b){
w.j.setVisible(true);
b=false;
}else{
w.j.setVisible(false);
b=true;
}
}*/
return true;
}
}
/*
public static void main(String[]args){
new w3();
}//主方法
*/
}
/*
public static void main(String[]args){
new w2();
}
*/
如上代码,键盘事件有反应但是会闪烁,该怎么才能让键盘按一下响应一会呢
该回答引用GPTᴼᴾᴱᴺᴬᴵ
你的问题可能是由于焦点不稳定引起的,当焦点从一个窗口转移到另一个窗口时,可能会导致窗口的闪烁或重绘。你可以尝试通过以下方法解决这个问题:
在你的代码中,你可以在 YourDispatcher 类中的 dispatchKeyEvent() 方法中添加以下代码:
public boolean dispatchKeyEvent(KeyEvent e){
// 在处理键盘事件之前,将焦点设置到当前窗口
e.getComponent().requestFocusInWindow();
// 处理键盘事件的代码
switch(e.getKeyCode()){
// ...
}
return true;
}
使用这些方法,你可以尝试解决窗口闪烁的问题,并确保每次按键都会触发键盘事件。