按钮上添加的键盘监听无法奏效

极客星云
博客专家认证
2014-07-17 12:00:58

请教各位前辈,为什么跟着马士兵老师写的代码,按钮上添加的键盘监听就不奏效呢?

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Keyboard_events {

// 定义该图形所需的组件的引用
private Frame f;
private Button but;

Keyboard_events(){

init();

}

// 对图形用户界面初始化
public void init() {

f = new Frame("窗口——by星云");
f.setBounds(300, 100, 600, 500); // 设置窗口位置和大小
f.setLayout(new FlowLayout());// 默认边界布局方式重置成流式布局

but = new Button("我是按钮");
f.add(but);

dealwithEvent();

f.setVisible(true);
}

//事件监听器以及处理事件
private void dealwithEvent()
{

//窗体关闭监听
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);

}

});

//键盘监听
but.addKeyListener(new KeyAdapter(){
public void keypressed(KeyEvent e)
{
//System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"......."+e.getKeyCode());
}
});

}

public static void main(String[] args) {

new Keyboard_events();
}

}


...全文
347 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
极客星云 2014-07-19
  • 打赏
  • 举报
回复
问题自己解决了,擦,竟然是一个字母大小写导致的。 现在附上正确源码:
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Keyboard_events {

     // 定义该图形所需的组件的引用
    private Frame f;
    private Button but;
 //   private TextField tf;

    Keyboard_events(){

        init();

    }

    // 对图形用户界面初始化
    public void init() {

        f = new Frame("窗口——by星云");
        f.setBounds(300, 100, 600, 500); // 设置窗口位置和大小
        f.setLayout(new FlowLayout());// 默认边界布局方式重置成流式布局

        but = new Button("我是按钮");
        f.add(but);
         
        dealwithEvent();

        f.setVisible(true);
    }

    //事件监听器以及处理事件
    private void dealwithEvent()
    {
         
        //窗体关闭监听
         f.addWindowListener(new WindowAdapter(){
             public void windowClosing(WindowEvent e){
                 System.exit(0);
                 
             }
             
         });
         

         
        //键盘监听
         but.addKeyListener(new KeyAdapter(){
        	 public void keyPressed(KeyEvent e)
        	 {
        		// if(e.getKeyCode()==27)
        	    //if(e.getKeyCode()==KeyEvent.VK_ESCAPE)
        		// if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
        			// System.exit(0);
        			/// System.out.println("ctrl+enter is running!");
        		System.out.println(e.getKeyChar()+"......."+e.getKeyCode());
        	 }
         });
        
    }
  
    public static void main(String[] args) {

          new Keyboard_events();
    }

}
极客星云 2014-07-18
  • 打赏
  • 举报
回复
引用 4 楼 vnvlyp 的回复:
为什么要将按键监听绑定在一个按钮上?这不符合常理吧。。 按钮又不是键盘输入容器。。你给一个Frame绑定按键还说得过去。。
可是马士兵老师人家就能成功运行时怎么回事?代码完全一样啊。那如果想实现这个功能,该怎么修改? 键盘输入容器有哪些?
vnvlyp 2014-07-18
  • 打赏
  • 举报
回复
为什么要将按键监听绑定在一个按钮上?这不符合常理吧。。 按钮又不是键盘输入容器。。你给一个Frame绑定按键还说得过去。。
极客星云 2014-07-17
  • 打赏
  • 举报
回复
那样还是不行诶。
yousun4688 2014-07-17
  • 打赏
  • 举报
回复
那是因为按钮没有获得键盘输入的焦点 dealwithEvent(); but.setFocusable(true); f.setVisible(true); 这样就可以 给按钮获取焦点就可以获取键盘监听事件
极客星云 2014-07-17
  • 打赏
  • 举报
回复
引用 1 楼 yousun4688 的回复:
那是因为按钮没有获得键盘输入的焦点 dealwithEvent(); but.setFocusable(true); f.setVisible(true); 这样就可以 给按钮获取焦点就可以获取键盘监听事件
你的方法试了,还是不行诶.....................

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧