keyListener,判断该key为keyEvent.YK_SHIFT时,break()

解决方案 »

  1.   

    keyEvent.YK_SHIFT怎么用啊,能举个例子吗??万分感谢!
      

  2.   

    判断是否按下“shift”键与判断其他键是一样的!增加一个监听器就可以了!
      

  3.   

    给你具个简单的例子public class MyApp extends java.awt.Frame
    {
        public static void main(String[] args) throws Exception{ MyApp myApp1 = new MyApp();}
    public MyApp() throws Exception
    {
                addKeyListener(new java.awt.event.KeyAdapter() {
                    public void keyPressed(java.awt.event.KeyEvent e) {
                        if((e.getModifiers()&java.awt.event.KeyEvent.SHIFT_MASK) != 0){
                            keyPressed = true;
                        }
                    }
                });
                setSize(320,200);
                setVisible(true);
                
                methoda();
    }        private void methoda() {
                Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
                while(true){
                    //todo:...
                    System.out.println("todo something...");
                    if(keyPressed){
                        break;
                    }
                }
                System.out.println("ok.");
            }
            private volatile boolean keyPressed = false;
    }
      

  4.   

    摆脱,人家第一个把VK_SHIFT打错成YK_SHIFT,后面竟然有两位仁兄照抄。有点专业精神好不好
      

  5.   

    我谈谈我的看法如果你在循环中判断,
    1、可以用多线程
    2、如果用单线程,一定要在循环中用sleep,否则很难捕捉到key事件
      

  6.   

    如果你自己有循环,那肯定得多线程,
    而且应该把循环放在多线程里面,
    从而让UI线程得到机会去处理SHIFT按键,
    否则会发现每次都要等循环完成才有机会响应SHIFT key
    另外vc里面可以在循环中调用
    void  DoEvents()
    {
        MSG msg;    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }或者vb直接调用doEvents()我就不清楚java是否也有类似的函数,可以给机会让ui线程处理消息或者触发listener所以为了安全起见,还是自己采用多线程把
      

  7.   

    谢谢各位的鼎力支持,非常感谢!!!但是, KeyListener, 或者是消息循环,多线程都不是我想要的,因为我觉得太麻烦,影响程序的可读性。最理想的方式是,只要调一个函数就可以知道我所关注的按键是否正被按下,或者曾经刚刚被按下过,比如VC里面的API函数GetAsyncKeyState()就可以做到这一点。继续关注中。