JAVA|键盘监听和按钮监听冲突
程序员文章站
2022-06-03 12:22:16
...
加了按钮监听之后键盘就无效了……
咋整?
键盘监听
// 构造函数
public MainFrame() {
// 初始化窗体(标题,大小,位置等)
initBasic();
// 初始化迷宫关卡(逻辑上)
initMapData();
// 初始化迷宫关卡(图形上)
initMapFrame();
// 初始化迷宫模式效果(模式logo,道具,模式介绍标签内容等)
initType2Frame();
//倒计时函数
time();
typeShow23.setText(steps + "");
// 按键监听
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent event) {
int k = event.getKeyCode();
// 暂时先存好移动前的数组
for (int m = 0; m < row; m++) {
for (int n = 0; n < column; n++) {
newData[m][n] = labyrinthData[m][n];
}
}
switch (k) {// 1左2右3上4下//32为空格键
case 37:
move(1);
break;
case 38:
move(3);
break;
case 39:
move(2);
break;
case 40:
move(4);
break;
}// switch
yesornoMove();
boolean havemove = yesornoMove();
if (havemove == true)// 有效移动就刷新
{
MainFrame.upDateUIpub(labyrinthData);
typeShow23.setText(steps + "");
gamestate();
steps--;
}
}
});
this.setFocusable(true);
// 初始化随机背景图 (先放置的图片在最上层,后放置的在下层。)
initMainFrameBack();
// 可视化
setVisible(true);
}
核心加上这句
this.setFocusable(true);
按钮监听
//“显示最短路径”按钮
JButton btn_minPath =new JButton();
btn_minPath.setBounds(850, 400, 150, 50);
btn_minPath.setText("显示最短路径");
btn_minPath.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//将起点到终点的最短路径填充小图片
//初始化起点和终点
node begin = new node();
node end = new node();
for(int i=0; i<row; i++) {
for(int j=0; j<column; j++) {
if(labyrinthData[i][j] == 2) {
begin.x = i;
begin.y = j;
begin.pre = null;
begin.distance = 0;
}
if(labyrinthData[i][j] == 5) {
end.x = i;
end.y = j;
end.pre = null;
end.distance = 0;
}
}
}
bfs(begin, end);
showMinPath(begin, end);
btn_minPath.setFocusable(false);
}
});
this.add(btn_minPath);
this.setFocusable(true);
核心为这句,这样就可以把焦点给键盘辣
btn_minPath.setFocusable(false);
上一篇: 递归(二)
下一篇: Kafka Shell基本命令