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

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);
   }

}



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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 哦,抱歉,我误解了。addEventListener是JavaScript中常用的一个方法,用于给DOM元素添加事件处理程序。它可以接收三个参数:事件类型、事件处理函数和一个布尔值(可选),表示事件是否在捕获阶段执行。例如: ```javascript document.getElementById("myButton").addEventListener("click", function() { alert("Button clicked!"); }); ``` 这段代码给id为myButton的按钮添加了一个click事件处理程序,当用户点击按钮时,就会弹出一个提示框显示"Button clicked!"。 ### 回答2: addEventListener 是JavaScript中的一个方法,它用于向特定的HTML元素添加事件监听器。 通过使用addEventListener,我们可以为指定的HTML元素绑定不同类型的事件,例如点击、鼠标移动、按键操作等等。 该方法有三个参数: 1. 事件类型:需要绑定的事件类型,例如:click、mousemove、keydown等。 2. 事件处理函数:当事件被触发时执行的函数。 3. 是否在事件捕获阶段触发执行:默认情况下是在事件冒泡阶段执行。 使用addEventListener的好处是,可以为同一个元素添加多个事件监听器,而不会覆盖原有的监听器。这样能够更灵活地处理事件,并且不会与其他代码产生冲突。 下面是一个例子: ```html <button id="myButton">点击我</button> <script> // 获取按钮元素 var button = document.getElementById("myButton"); // 添加click事件监听器 button.addEventListener("click", function(){ console.log("按钮被点击了"); }); // 添加mouseover事件监听器 button.addEventListener("mouseover", function(){ console.log("鼠标移到按钮上"); }); </script> ``` 在上面的例子中,我们给按钮元素绑定了两个事件监听器:点击事件和鼠标移动事件。当按钮被点击或鼠标移到按钮上时,相应的事件处理函数就会执行。 总结来说,addEventListener是一个很有用的方法,它可以让我们更方便地处理和管理事件,从而增强网页的交互性和功能性。 ### 回答3: addEventListener 是JavaScript中的一个方法,用来为指定的元素添加事件监听器。通过使用它,可以实现将特定的功能与特定的事件进行绑定。 在使用 addEventListener 时,需要指定三个参数:事件类型、事件处理函数和一个可选的布尔值,用来控制事件的捕获或冒泡阶段。事件类型可以是HTML DOM中定义的标准事件,也可以是自定义事件。 例如,如果我们要为一个按钮添加点击事件监听器,我们可以使用以下代码: ``` const button = document.querySelector('button'); function handleClick() { console.log('按钮被点击了'); } button.addEventListener('click', handleClick); ``` 在这个例子中,我们首先使用 `document.querySelector` 方法选择了文档中的一个按钮元素,并将其存储在一个变量 `button` 中。然后,我们定义了一个名为 `handleClick` 的函数,该函数在按钮被点击时会被调用,并将一条信息打印到控制台中。最后,我们使用 `addEventListener` 将 `handleClick` 函数添加为按钮的点击事件监听器。 这是一个简单的例子,实际上我们可以使用 `addEventListener` 来监听多种类型的事件,如鼠标移动、键盘按下等等。使用 addEventListener 可以使我们的代码更具可读性和可维护性,同时也能够将逻辑与HTML代码分离开来,使得我们的代码更加模块化和易于管理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值