我有一个带有快捷键的MenuItem,用于保存JTextFied临时数据并打印它
在JTextField的FocusLost事件上调用保存功能,并通过MenuItems actionListener调用打印,并且当我单击MenuItem以及按下menuitem的快捷键时会触发打印(例如:f1)
问题是,当我直接按f1(menuitem的快捷键)时,仅在menuitem执行其动作后才触发Textfied的focusLost事件,而当我进入菜单并按时,将首先触发focuslost菜单的动作
有没有办法强制Focuslost,以便即使使用快捷键,也将首先触发focusLost事件
使用requesfocusinWindow,setText进行了尝试(在其他演示文本字段上执行,只是为了强制focusLost)
最佳答案
1)我认为这在编程语言中是不可能的,更多关于AWT Focus Subsystem和How to Use the Focus Subsystem的理论,
2)您必须将此保存过程重定向到Backgroung任务,并且在此之前,您可以检查是否未选择JMenu
及其JMenuItem
,为此检查仅使用ButtonModel
,否则不要执行那是因为您的GUI需要等待此过程
3)另一个选择是保存从JComponents
到某些Array
的定期基准值,您可以在其中检查值是否已更改,是否必须从Backgroung Task中检查/保存所有更改,而不会影响Swing GUI
4)如何创建类似Timer的最简单方法是将某些逻辑包装到Runnable#Thread
,延迟Thread.sleep(int)
但仅在Runnable#Thread
内部