繁体   English   中英

Java中的KeyListener没有响应

[英]KeyListener in Java not responding

我必须使用JCheckBoxes和JButtons开发一些简单的Java应用程序。 为了完成此操作,每当我按下数字键(0-9)时,我都必须进行控制,以便JChechBox更改其状态(notSelected <> selected)。

我在这里附上我的代码。 我已经完成了窗口,但是当我按下按键时,什么也没发生...

救命!!!

public class Window extends JFrame {

    public static JCheckBox check1;
    private static JCheckBox check2;
    private static JCheckBox check3;
    private static JCheckBox check4;
    private static JCheckBox check5;
    private static JCheckBox check6;
    private static JCheckBox check7;
    private static JCheckBox check8;
    private static JCheckBox check9;
    private static JCheckBox check10;

    public static void main( String[] args ){
        JFrame frame = new JFrame( "Window");
        frame.setSize( 600, 600 );
        frame.setVisible( true );
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

        JButton open = new JButton("OPEN"); 
        open.setLocation( 330, 340 );
        open.setSize( 85, 30 );
        frame.add( open ); 

        JButton save = new JButton("SAVE"); 
        save.setLocation( 480, 340 );
        save.setSize( 85, 30 );
        frame.add( save); 

        check1 = new JCheckBox("option1");
        check1.setLocation( 25, 60 );
        check1.setSize( 146, 30 );
        frame.add( check1 );


        check2 = new JCheckBox("option2"); 
        check2.setLocation( 25, 90 );
        check2.setSize( 146, 30 );
        frame.add( check2 );

        check3 = new JCheckBox("option3");
        check3.setLocation( 25, 120 );
        check3.setSize( 146, 30 );
        frame.add( check3 );

        check4 = new JCheckBox("option4");
        check4.setLocation( 25, 150 );
        check4.setSize( 146, 30 );
        frame.add( check4 );        

        check5 = new JCheckBox("option5");
        check5.setLocation( 25, 180 );
        check5.setSize( 146, 30 );
        frame.add( check5 );

        check6 = new JCheckBox("option6");
        check6.setLocation( 25, 210);
        check6.setSize( 146, 30 );
        frame.add( check6 );        

        check7 = new JCheckBox("option7");
        check7.setLocation( 25, 240 );
        check7.setSize( 146, 30 );
        frame.add( check7 );

        check8 = new JCheckBox("option8");
        check8.setLocation( 25, 270 );
        check8.setSize( 146, 30 );
        frame.add( check8 );

        check9 = new JCheckBox("option9");
        check9.setLocation( 25, 300 );
        check9.setSize( 146, 30 );
        frame.add( check9 );

        check10 = new JCheckBox("option10");
        check10.setLocation( 25, 330);
        check10.setSize( 146, 30 );
        frame.add( check10 );

        TextArea area = new TextArea();
        area.setLocation( 320, 150 );
        area.setSize(250, 180);
        frame.add( area );

        frame.addKeyListener(new KeyListener() {

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

            }

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

            }

            @Override
            public void keyPressed(KeyEvent arg0) {
                int keyCode = arg0.getKeyCode();

                switch (keyCode) {
                case KeyEvent.VK_1:
                    check1.setSelected(true);
                    break;
                case KeyEvent.VK_2:
                    check2.setSelected(true);
                    break;
                case KeyEvent.VK_3:
                    check3.setSelected(true);
                    break;
                case KeyEvent.VK_4:
                    check4.setSelected(true);
                    break;
                case KeyEvent.VK_5:
                    check5.setSelected(true);
                    break;
                case KeyEvent.VK_6:
                    check6.setSelected(true);
                    break;
                case KeyEvent.VK_7:
                    check7.setSelected(true);
                    break;
                case KeyEvent.VK_8:
                    check8.setSelected(true);
                    break;
                case KeyEvent.VK_9:
                    check9.setSelected(true);
                    break;
                case KeyEvent.VK_0:
                    check10.setSelected(true);
                    break;
                }               
            }
        });
    }
}

最简单的方法是使用JCheckBox.setMneumonic,但是用户必须按alt-1,alt-2等。如果您的要求很严格,我建议您使用KeyBoardFocusManager并实现一个KeyEventDispatcher,它将击键指向点击复选框

JavaDocs说:

要触发键盘事件,组件必须具有键盘焦点。

在这种情况下,键盘焦点位于TextArea 。因此,必须将KeyListener添加到Textarea

area.addKeyListener(new KeyListener(){
       //Your code
}

您可以使用frame.setFocusable(true)将焦点设置在JFrame ,并且只要将焦点更改为TextArea ,它就应该起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM