请教关于监听键盘字符的小问题

tregfdvcx 2012-11-06 12:05:36
我想监听键盘字符,按下ctrl+z时进行打印,请问在代码中ctrl+z如何表示,我用InputEvent.CTRL_MASK+KeyEvent.VK_Z表示运行不正确,用'右箭头字符'运行正确,但我不想用字符表示,想用代码表示,应该如何写?
public class MonitorText {
JFrame f=new JFrame();
JTextArea text=new JTextArea(10,50);

void init(){
text.addKeyListener(new KeyAdapter(){
public void keyTyped(KeyEvent e){
System.out.println(e.getKeyChar());
//if(e.getKeyChar()==InputEvent.CTRL_MASK+KeyEvent.VK_Z),这句不行,应该如何表示?
if(e.getKeyChar()==''){//这句可以,''内的字符为右箭头,复制到这里未显示出来,调试是正确的,但我不想用字符想用代码表示
System.out.println("ctrlz");
}
}
});
f.add(text);
f.pack();
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args)
{
new MonitorText().init();
}

}
...全文
333 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tregfdvcx 2012-12-28
  • 打赏
  • 举报
回复
引用 12 楼 abstruct 的回复:
看看是否满足你的要求吧。方法帮你改了一下 Java code?1234567891011121314151617181920212223public class MonitorText { static JFrame f = new JFrame(); static JTextArea text = new JTextArea(10, 50); v……
成功!keyTyped需要换为keyPressed,但如果将if(e.isControlDown() && e.getKeyCode() == e.VK_Z)换为if(e.isControlDown()&&e.getKeyChar()='z')就不可以,为什么?e.getKeyCode与e.getKeyChar区别是在哪里? 有空帮我看看这个 http://bbs.csdn.net/topics/390331478
安特矮油 2012-12-21
  • 打赏
  • 举报
回复
看看是否满足你的要求吧。方法帮你改了一下

public class MonitorText {

	static JFrame f = new JFrame();
	static JTextArea text = new JTextArea(10, 50);

	void init() {
		text.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e){
				if(e.isControlDown() && e.getKeyCode() == e.VK_Z){
					System.out.println("ctrl + z");
				}
			}
		});
		f.add(text);
		f.pack();
		f.setVisible(true);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public static void main(String[] args) {
		new MonitorText().init();
	}
}
其实偶不疼 2012-12-21
  • 打赏
  • 举报
回复
        text.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e){
                  Boolean ctrl = false;
                   Boolean z= false;
				if (ctrl&&z ) {
					//to do sth
				}
                if(e.getKeyCode() == KeyEvent.VK_Z){
                    z= true;
                }
                if(e.getKeyCode() == KeyEvent.VK_CONTROL){
                   ctrl = true;
                }
            }
        });
试试这个,我没运行过,应该可以满足你的要求
tregfdvcx 2012-11-25
  • 打赏
  • 举报
回复
谢谢楼上朋友,很执着但是方法还是不对。这个应该没有很大难度的吧。。。。。
huntor 2012-11-09
  • 打赏
  • 举报
回复
居然没有注意到 isControlDown这个方法:
addKeyListener(new KeyAdapter(){
                            @Override public void keyPressed(KeyEvent e){
                                if(e.isControlDown() && (e.getKeyCode() == 'Z'))
                                    System.out.println("Ctrl + Z pressed");
                            }
                        });
tregfdvcx 2012-11-09
  • 打赏
  • 举报
回复
这么个小问题,咋就没有人能回答?
huntor 2012-11-08
  • 打赏
  • 举报
回复
晕,你看getModifiersEx的文档,不是上面这种判断方法。
tregfdvcx 2012-11-08
  • 打赏
  • 举报
回复
引用 6 楼 huntor 的回复:
判断ctrl按下应该是使用getModifiersEx方法
用if((e.getModifiersEx()==InputEvent.CTRL_DOWN_MASK)&&(e.getKeyChar()=='')){ ... } 或者用 if((e.getModifiersEx()==InputEvent.CTRL_DOWN_MASK)&&(e.getKeyChar()==KeyEvent.VK_Z)){ ... } 都不行
tregfdvcx 2012-11-07
  • 打赏
  • 举报
回复
引用 1 楼 dr8737010 的回复:
mask意思为掩码,那你试试: InputEvent.CTRL_MASK | KeyEvent.VK_Z 当然我没搞过Swing,这个是猜测
System.out.println((char)(InputEvent.CTRL_MASK|KeyEvent.VK_Z))的结果为Z。按你的方法程序没有反应,即键盘按下ctrl+z没有被识别。
tregfdvcx 2012-11-07
  • 打赏
  • 举报
回复
引用 3 楼 huntor 的回复:
Java code12345678Action printAction = new AbstractAction("Print"){ @Override public void actionPerformed(ActionEvent e){ ...; // print sth. }};printAction.put(Action.ACCELERA……
我加监听器的本意不是打印,而是调用UndoableEdit实例的undo方法进行撤销操作,原代码还有一句:text.addKeyListener(new KeyAdapter(){ public void keyTyped(KeyEvent e){ if(e.getKeyChar()==''){ undoLis.removeLast().undo();//此句被我简化了 System.out.println("ctrlz"); } } }); 所以你提供的方法不太适合呀。
huntor 2012-11-07
  • 打赏
  • 举报
回复
判断ctrl按下应该是使用getModifiersEx方法
huntor 2012-11-06
  • 打赏
  • 举报
回复
Action printAction = new AbstractAction("Print"){
    @Override public void actionPerformed(ActionEvent e){
        ...; // print sth.
    }
};
printAction.put(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("control Z"));
fileMenu.add(printAction);
toolbar.add(printAction);
BadPattern 2012-11-06
  • 打赏
  • 举报
回复
看了一下API的常量值,应该就是这样使用了
BadPattern 2012-11-06
  • 打赏
  • 举报
回复
mask意思为掩码,那你试试: InputEvent.CTRL_MASK | KeyEvent.VK_Z 当然我没搞过Swing,这个是猜测

62,620

社区成员

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

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