使用JCheckBox后的KeyPressed事件

时间:2015-02-11 10:41:54

标签: java

我有一个复选框和一个按钮。当我按下ENTER激活按钮时,我希望这样。如果我只是在运行时按Enter键,它会按预期工作,但如果我之前使用复选框,它将不再起作用。

import java.awt.*;
import java.awt.event.*;
import java.io.IOException;

import javax.swing.*;
import javax.swing.plaf.LayerUI;


public class Animation{


    public Animation(){

         JFrame frame = new JFrame();
         Pane a = new Pane();
         a.addKeyListener(a);
         frame.add(a);
         //frame.setUndecorated(true);
        // frame.setOpacity(0.9f);
         frame.setVisible(true);
         frame.setSize(700, 300);
         frame.setLocationRelativeTo(null);
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }




    public static void main(String[] args) {
        new Animation();
    }




 public class Pane extends JPanel implements KeyListener{
     JButton buton = new JButton("BUTTON!!!! ");
        JCheckBox c = new JCheckBox("Check");
        public Pane(){
     add(new JCheckBox("CHECKK"));
     add(buton);
     c.setFocusable(false);

     buton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            System.out.println("Pressed!");
        }
     });

    }

        @Override
        public void keyReleased(KeyEvent e) {
            // TODO Auto-generated method stub

        }
        @Override
        public void keyTyped(KeyEvent e) {
            // TODO Auto-generated method stub

        }
        public void keyPressed(KeyEvent arg0) {

                if(arg0.getKeyCosw() == KeyEvent.VK_ENTER){
                    //if(buton.isDisplayable()){
                        System.out.println("pressed");
                        //buton.doClick();
                        //return;
                        //}

                }
 }
 }
}

1 个答案:

答案 0 :(得分:0)

此代码示例中未调用

keyPressedbuton.addKeyListener( this );遗失了吗?

如果使用复选框,则会收到焦点。您可以在该复选框上致电setFocusable( false )。所以唯一关注的组件就是按钮。并且它将始终收到关键事件。

否则,您也可以将键侦听器添加到复选框。

另外,在this answer处获取llok以了解如何设置全局键侦听器(如果您不想拒绝聚焦组件或者不想为每个组件添加键侦听器)。