【问题标题】:KeyPressed Event after using JCheckBox使用 JCheckBox 后的 KeyPressed 事件
【发布时间】:2015-04-11 16:46:16
【问题描述】:

我有一个复选框和一个按钮。当我按 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;
                        //}

                }
 }
 }
}

【问题讨论】:

    标签: java


    【解决方案1】:

    keyPressed 在此代码示例中未被调用。 buton.addKeyListener( this ); 不见了吗?

    如果您使用复选框,它会获得焦点。您可以在该复选框上调用setFocusable( false )。所以唯一的焦点组件将是按钮。而且它总是会收到关键事件。

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

    另外,请访问this answer 了解如何设置全局键侦听器(如果您不想拒绝聚焦组件或不想为每个组件添加键侦听器)。

    【讨论】:

    • 它没有被调用,因为没有addKeyListener。现在它出现了。看:关键事件在焦点组件上被捕获。您已将侦听器添加到面板中,但它从未聚焦。因此,您在我的回答中描述了三种解决问题的方法:1. 拒绝关注除侦听键事件的组件之外的组件,2. 为每个组件添加键侦听器,3. 添加全局键侦听器。
    猜你喜欢
    • 2014-03-05
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多