Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java事件侦听器(鼠标和键盘)_Java_Swing_Event Handling_Mouseevent_Keyboard Events - Fatal编程技术网

Java事件侦听器(鼠标和键盘)

Java事件侦听器(鼠标和键盘),java,swing,event-handling,mouseevent,keyboard-events,Java,Swing,Event Handling,Mouseevent,Keyboard Events,所以我的程序中除了鼠标和键盘监听器以外的所有东西都能正常工作。 我有几个ActionListener在处理Jbuttons,它们正是我想在这里做的,但是作业说它必须与这三个按钮一起工作。 所以我想知道为什么它可以编译,但不起作用。我做错什么了吗 panel.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { } @Over

所以我的程序中除了鼠标和键盘监听器以外的所有东西都能正常工作。 我有几个ActionListener在处理Jbuttons,它们正是我想在这里做的,但是作业说它必须与这三个按钮一起工作。 所以我想知道为什么它可以编译,但不起作用。我做错什么了吗

panel.addKeyListener(new KeyListener() {
        @Override
        public void keyTyped(KeyEvent e) {

        }

        @Override
        public void keyPressed(KeyEvent e) {
             if(e.getKeyCode() == KeyEvent.VK_UP){
                shape.addSides();
            }
            if(e.getKeyCode() == KeyEvent.VK_DOWN){
                shape.subSides();
            }
        }

        @Override
        public void keyReleased(KeyEvent e) {

        }

    }

    );
    panel.addMouseListener(new MouseListener(){
        @Override
        public void mouseEntered(MouseEvent e){
            if(e.getButton() == MouseEvent.BUTTON1){

                shape.addSides();
            }
            if(e.getButton() == MouseEvent.BUTTON3){

                shape.subSides();
            }

        }

        @Override
        public void mouseClicked(MouseEvent e) {

        }

        @Override
        public void mousePressed(MouseEvent e) {   
        }

        @Override
        public void mouseReleased(MouseEvent e) {
        }

        @Override
        public void mouseExited(MouseEvent e) {
        }

    }
    );

关于KeyListener:除非侦听的组件是可聚焦的并且具有焦点,否则它不会工作。因此,您需要在JPanel上调用
setFocusable(true)
requestFocusInWindow()
。至于MouseListener——可能还有其他原因导致鼠标事件无法到达您的JPanel。要调试它,您需要发布一个


同样关于您的MouseListener,您在mouseEntered事件中检查
getButton()
,这毫无意义。此类事件不涉及按钮。您是否打算检查MouseMotionListener的鼠标标记(…)。另一种方法是使用
JComponent在JButton上设置keybinding。当处于聚焦窗口中时,如本文中所述,完全忽略了我书中的
setFocusable(true)
requestFocusInWindow()
。他为我修好了键盘。至于鼠标听筒的位置,我把它放在原来放在上面的地方。当它不起作用时,我对所有4个都做了一个复制,希望其中一个能起作用,但它没有。当我把它放到
mouseClicked()
中时,它确实起作用了。谢谢你的帮助。我按时完成了这个项目。