按键事件在日期选择器中不起作用

Posted

技术标签:

【中文标题】按键事件在日期选择器中不起作用【英文标题】:Key press event not working in date picker 【发布时间】:2015-12-16 10:12:07 【问题描述】:

我需要 Java Swing 中日期选择器的按键事件。 我试过这个,但它不起作用。

if (evt.getKeyCode()==evt.VK_ENTER)

   txttotal.requestFocus();

【问题讨论】:

您是否尝试过使用ActionListener 代替?您使用的是哪个日期选择器 API? 如需尽快获得更好的帮助,请发帖minimal reproducible example 或Short, Self Contained, Correct Example。 > MadProgrammer:我正在使用 microba 并尝试使用 netbeans 中提供的默认日期选择器,但 acttionlistner 也无法正常工作。 【参考方案1】:

您可以使用与此代码相同的基本 UI 中的弹出窗口来查找内部组件。 但是您必须通过名称而不是常量索引来查找组件。

public class MainClass 
    public static void main(String [] args) 
        JFrame jFrame=new JFrame();
        jFrame.setLayout(null);
        jFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        jFrame.setBounds(10,10,500,500);
        JInternalFrame frame=new JInternalFrame("test",false,true,false,true);
        frame.setLayout(null);
        frame.setBounds(100, 100, 200, 200);
        frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        frame.setVisible(true);
        DatePicker datePicker=new DatePicker() 

        ;

        datePicker.setBounds(10,10,100,20);
        frame.add(datePicker);
        jFrame.add(frame);
        jFrame.setVisible(true);

        datePicker.showPopup();
        datePicker.hidePopup();
        BasicDatePickerUI datePickerUI= (BasicDatePickerUI )datePicker.getUI();
        datePicker.getComponent(1).addKeyListener(new KeyListener() 
            @Override
            public void keyTyped(KeyEvent e) 
                if(e.getKeyCode()==e.VK_ENTER) 
                    System.out.println("TYPE OK ON BUTTON!");
                
            

            @Override
            public void keyPressed(KeyEvent e) 
                if(e.getKeyCode()==e.VK_ENTER) 
                    System.out.println("PRESS OK ON BUTTON!");
                
            

            @Override
            public void keyReleased(KeyEvent e) 
                if(e.getKeyCode()==e.VK_ENTER) 
                    System.out.println("RELEASE OK ON BUTTON!");
                
            
        );

        datePicker.getComponent(0).addKeyListener(new KeyListener() 
            @Override
            public void keyTyped(KeyEvent e) 
                if(e.getKeyCode()==e.VK_ENTER) 
                    System.out.println("TYPE OK ON TEXT!");
                
            

            @Override
            public void keyPressed(KeyEvent e) 
                if(e.getKeyCode()==e.VK_ENTER) 
                    System.out.println("PRESS OK ON TEXT!");
                
            

            @Override
            public void keyReleased(KeyEvent e) 
                if(e.getKeyCode()==e.VK_ENTER) 
                    System.out.println("RELEASE OK ON TEXT!");
                
            
        );
        try 
            Field field=BasicDatePickerUI.class.getDeclaredField("popup");
            field.setAccessible(true);
            JPopupMenu popup=(JPopupMenu)field.get(datePickerUI);
            ((JComponent) ((JComponent) popup.getComponent(0)).getComponent(2)).addKeyListener(new KeyListener() 
                @Override
                public void keyTyped(KeyEvent e) 
                    if(e.getKeyCode()==e.VK_ENTER) 
                        System.out.println("TYPE OK ON POPUP!");
                    

                

                @Override
                public void keyPressed(KeyEvent e) 
                    if(e.getKeyCode()==e.VK_ENTER) 
                        System.out.println("PRESS OK ON POPUP!");
                    

                

                @Override
                public void keyReleased(KeyEvent e) 
                    if(e.getKeyCode()==e.VK_ENTER) 
                        System.out.println("RELEASE OK ON POPUP!");
                    

                
            );
            System.out.println("wait for ENTER key...");
         catch (NoSuchFieldException e) 
            e.printStackTrace();
         catch (IllegalAccessException e) 
            e.printStackTrace();
        

    


如果您在 DatePicker Text 或 Popup 上按 ENTER 键,您可以在控制台输出中看到 PRESS OK ON POPUP PRESS OK ON TEXT

【讨论】:

以上是关于按键事件在日期选择器中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

禁用日期的 HTML5 日期选择器在 Angular 中不起作用

日期选择器对话框在片段中不起作用[关闭]

JQuery UI 日期选择器在 Chrome 中不起作用

为啥 jQuery UI 日期选择器在 jQuery 对话框模式中不起作用?

奏鸣曲日期选择器在其他语言环境中不起作用

MVC2:日期选择器在编辑器模板中不起作用