按键事件在日期选择器中不起作用
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 中不起作用