关于按钮监听和键盘监听冲突问题

package gui;
//创建一个匿名类实现ActionListener接口,当按钮被点击时,actionPerformed方法就会被调用
//增加按钮监听

//增加键盘监听
//键盘监听器: KeyListener
//keyPressed 代表 键被按下
//keyReleased 代表 键被弹起
//keyTyped 代表 一个按下弹起的组合动作
//KeyEvent.getKeyCode() 可以获取当前点下了哪个键

//把按钮监听中的按钮上的文字从“隐藏图片” 改为 "显示图片"。
//第一次点击的时候,会使得图片隐藏,第二次点击的时候,会使得图片显示,如此循环下去。
//一旦点击了"隐藏图片",按钮上的文字就要变成“显示图片” 。。。 如此循环
//提示: 调用JButton对象的setText改变按钮上的文字
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;


import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;




public class ActionListenerExercise {


public static void main(String[] args) {
// TODO Auto-generated method stub
    JFrame f =new JFrame("LOL");
    f.setSize(400,300);
    f.setLocation(580,200);
    f.setLayout(null);//java默认为flowLayout布局,设置null用来清空布局管理器,便于之后添加组件

    //接下来设置显示图片
JLabel l =new JLabel();

ImageIcon i= new ImageIcon("e:/project/shana.png");
l.setIcon(i);
    l.setBounds(140,50,i.getIconWidth(),i.getIconHeight());
    
    //设置一个按钮
    JButton b =new JButton("隐藏图片");
    b.setBounds(150, 200, 100, 30);


    //给按钮增加监听
    b.addActionListener(new ActionListener(){
    //当按钮被点击时,就会触发ActionEvent事件
    //actionPerformed方法就会被执行
    boolean hide =false;
    public void actionPerformed(ActionEvent e) {
   
    l.setVisible(hide);
    hide =!hide;
    b.setText(hide?"显示图片":"隐藏图片");
    }
    });
    
//给键盘增加监听
    //这两个会有冲突,应该是设置焦点的问题
 f.addKeyListener(new KeyListener(){
   
    public void keyReleased(KeyEvent e) {
    //39代表按下了“右键”
   
    if(e.getKeyCode()==39) {
    l.setLocation(l.getX()+ 10, l.getY());
    f.requestFocus(); //这里再加上这一句
    }
    }
    
    //键被按下
    public void keyPressed(KeyEvent e) {
   
   
    //一个按下弹起的组合动作
    public void keyTyped(KeyEvent e) {
   
    }
   
    });
    
    
    f.add(b);
    f.add(l);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    f.setVisible(true);
   }

}



在这里,运行了按钮监听之后,键盘监听无效,如果关闭按钮监听,键盘监听是有效的,所以有冲突的情况

查阅资料以后发现是焦点设置问题,待后续补充

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值