我有一个带有快捷键的MenuItem来保存JTextFied临时数据并将其打印
在JTextField的FocusLost事件上调用save函数,并通过MenuItems actionListener调用print,当我单击MenuItem以及按下menuitem的快捷键时触发(例如:f1)
问题在于,当我直接按f1(menuitem的快捷键)时,Textfied的focusLost事件仅在menuitem执行其动作后触发,而当我进入菜单并按下时,首先触发focuslost然后是菜单的动作
有没有办法强制使用Focuslost,即使使用快捷键,也会首先触发focusLost事件
尝试使用requesfocusinWindow,setText(在其他演示文本字段上执行以强制使用focusLost)
答案 0 :(得分:2)
1)我认为在编程语言中不可能,更多关于AWT Focus Subsystem和How to Use the Focus Subsystem理论中的内容,
2)您必须将此保存流程重定向到Backgroung任务,在此之前您可以检查是否{/ 1}}及其JMenu
未被选中,此检查仅用于{{ 1}},否则不要这样做,因为你的GUI需要等待这个过程
3)anothere选项保存在从JMenuItem
到某些ButtonModel
的定期基础值,您可以检查值是否已更改,必须从Backgroung任务检查/保存所有更改,对Swing GUI的任何影响
4)最简单的方法如何创建一些东西,因为Timer会将一些逻辑包装到JComponents
,延迟Array
但仅限于Runnable#Thread
内
答案 1 :(得分:1)
当您想要'强制'focusLost时,通常会怀疑,因为该事件的意图是用户做了一些事情来改变应用程序的焦点状态。当你说F1是一个菜单项快捷方式时,你的意思是它是选择菜单时执行的相同代码的快捷方式,还是你将其设置为菜单助记符?
最后,快捷键通常不会本质上改变焦点,而单击菜单项所需的鼠标操作则可以,这可能是您自己要考虑的事情。