欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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);
相关标签: JAVA