JFrame能监听键盘事件吗? |
您所在的位置:网站首页 › jframe监听按键 › JFrame能监听键盘事件吗? |
JFrame能监听键盘事件吗? 楼主dudee() 2006-04-04 12:51:54 在 Java / J2SE / 基础类 提问 我的JFrame监听不到.请大家帮帮忙. 谢谢.问题点数:50、回复次数:20Top 1 楼interpb(曾曾胡,深怕情多累美人!)回复于 2006-04-04 13:11:50 得分 0看看你的程序 Top 2 楼jobs002(Oh! Office)回复于 2006-04-04 13:15:37 得分 0addKeyListener public void addKeyListener(KeyListener l)添加指定的按键侦听器,接收此组件发出的按键事件。如果 l 为 null,则不会抛出异常并且不执行操作。Top 3 楼OnlyFor_love(『勾勾手指头 一辈子不分手』)回复于 2006-04-04 13:16:43 得分 0同意楼上 Top 4 楼jobs002(Oh! Office)回复于 2006-04-04 14:00:46 得分 0import java.awt.*; import java.awt.event.*; class Test2 extends Frame { public Test2() { this.addKeyListener(new MyKeyAdapter()); } private class MyKeyAdapter extends KeyAdapter { public void keyTyped(KeyEvent e) { System.out.println("Pressed"); } } public static void main(String []args) { Test2 t=new Test2(); t.setSize(500,500); t.show(); } }这个是Frame类,JFrame是Frame的子类,当然也可以接收键盘事件.Top 5 楼jobs002(Oh! Office)回复于 2006-04-04 14:05:25 得分 0解决就揭帖..............Top 6 楼dudee()回复于 2006-04-04 14:10:25 得分 0我的JFrme一得到焦点马上会失去焦点.是不是内部窗口把焦点夺走了,所有监听不到键盘事件. 那有什么办法给JFrame添加上键盘事件呢?Top 7 楼jobs002(Oh! Office)回复于 2006-04-04 14:12:40 得分 0帖下代码,让楼上的高手给看看................Top 8 楼dudee()回复于 2006-04-04 14:27:15 得分 0谢谢楼上的代码.帮我顶上去. 可能开始没把问题说清楚.我在JFrame里加入JDesktopPane用来加载内部窗口,我发现JFrame一得到焦点马上就会失去.不清楚是不是这个原因,所以才监听不到键盘事件.Top 9 楼gougou8180()回复于 2006-04-04 14:29:27 得分 0看不懂你这代码是干嘛的Top 10 楼prowns(李大智)回复于 2006-04-04 14:33:32 得分 0JFrame默认是不能得到焦点的,你在程序里加上setFocusable(true)应该就可以了Top 11 楼dudee()回复于 2006-04-04 15:36:26 得分 0setFocusable(true)已经设了.还是不行. 是否能用一个守护线程来监听呢.还是有更好的方法.Top 12 楼jlu3389(激情的89)回复于 2006-04-04 16:45:41 得分 0markTop 13 楼jobs002(Oh! Office)回复于 2006-04-04 17:08:19 得分 0import java.awt.*; import java.awt.event.*; import javax.swing.*; class keytest extends JFrame{ public keytest(){ mypanel f=new mypanel(); getContentPane().add(f); setSize(300,300); show(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String a[]){ new keytest(); } } class mypanel extends JPanel{ mypanel(){ setFocusable(true);//加了一句; addKeyListener(new KeyAdapter(){ public void keyTyped(KeyEvent e){ char c=e.getKeyChar(); if(c=='o') System.out.print("o is pressed"); } }); } } 给你一个例子...........,......................Top 14 楼dudee()回复于 2006-04-04 17:32:02 得分 0谢谢楼上的所有朋友. 我把问题说一次; 我在JFrame里加入JDesktopPane用来加载JInternalFrame,我已经设了setFocusable(true),所以JFrame才会一得到焦点马上就会失去.因为一打开一个JInternalFrame,JFrame的焦点就会被刚打开的JInternalFrame夺走,所以JFrame就无法监听到键盘事件. 作用是做一个全局的键盘事件监听,不管你正打开哪个JInternalFrame或JDialog. 想不到一个好的方法... Top 15 楼f_acme(沧海一声笑)回复于 2006-04-04 17:40:09 得分 0因为一打开一个JInternalFrame,JFrame的焦点就会被刚打开的JInternalFrame夺走, --难道不可以对你要获取事件的那个JFrame再setFocusable(true)吗?Top 16 楼dudee()回复于 2006-04-04 17:59:42 得分 0"难道不可以对你要获取事件的那个JFrame再setFocusable(true)吗?" 你的意思是说让JFrame每次触发键盘之前先setFocusable(true).但是你当前正前操作一个JInternalFrame,焦点已经在当前的JInternalFrame上.除非你的JInternalFrame也有键盘事件监听,通过当前的JInternalFrame键盘事件来触发JFrame的键盘事件.这样是肯定走得通的,如果存在有500个JInternalFrame,必需每个都得添加监听程序,太麻烦了.Top 17 楼netspies(从头再来)回复于 2006-04-05 11:39:32 得分 0大家看看这个,看是不是真的,如果觉得是真的,就传: http://life.fzylw.com/info/info.php?id=1186Top 18 楼jobs002(Oh! Office)回复于 2006-04-05 11:45:49 得分 0请问楼上的,到底什么意思???有什么意义???????Top 19 楼qingyuan18(zealot_tang)回复于 2006-04-05 12:53:26 得分 0焦点有三种方式:一种为当前组件获得焦点,一种是该组件的容器获得焦点,一种是该组件的子组件获得焦点,你用KeyListener是默认第一种方式获得焦点的。 建议不用底层的keyListener监听,改用给组件注册keyStroke的方式,这样可以支持所有的键盘事件,且可以设定上诉3种获取焦点方式Top 20 楼qingyuan18(zealot_tang)回复于 2006-04-05 13:00:21 得分 0public class KeyCodeAdapter { private KeyCodeMap keyCodeMap ; private JTable myTable; //按键操作,包括单键和多键操作 private int iStrokeCount = 0; private String[] keyStrokePath = new String[1024]; KeyStroke keyStroke[] = new KeyStroke[1024]; public KeyCodeAdapter(KeyCodeMap pm_keyCodeMap,JTable pm_jTable) { this.keyCodeMap = pm_keyCodeMap; this.myTable = pm_jTable; } /** * register Action to the JTable */ public void registerAction() { LinkedList keyCodeList = (LinkedList)keyCodeMap.getKeyCodeMapList(); for(int i=0;i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |