我有一个带有快捷键的MenuItem,用于保存JTextFied临时数据并打印它

在JTextField的FocusLost事件上调用保存功能,并通过MenuItems actionListener调用打印,并且当我单击MenuItem以及按下menuitem的快捷键时会触发打印(例如:f1)

问题是,当我直接按f1(menuitem的快捷键)时,仅在menuitem执行其动作后才触发Textfied的focusLost事件,而当我进入菜单并按时,将首先触发focuslost菜单的动作

有没有办法强制Focuslost,以便即使使用快捷键,也将首先触发focusLost事件

使用requesfocusinWindow,setText进行了尝试(在其他演示文本字段上执行,只是为了强制focusLost)

最佳答案

1)我认为这在编程语言中是不可能的,更多关于AWT Focus SubsystemHow 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内部

10-07 16:20