gpt4 book ai didi

java - setVisible 和 requestFocus on textField

转载 作者:行者123 更新时间:2023-12-01 18:30:05 24 4
gpt4 key购买 nike

我有 Action 线程,因为它是 Swing 软件,EDT。
我希望我的程序绘制对话框窗口,当它出现并且充满数据时,我希望将焦点放在选定的文本字段上。

代码流程:当我执行时,它将运行主线程,该线程在 EDT 上的 invokeLater 中调用方法来绘制对话框。然后程序继续进行,并在主线程中再次使用 invokeLater 调用在 ED 线程中运行的下一个方法。

问题:当我正常运行它时,它不会将焦点放在我的文本字段上。

观察:但是当我向主线程添加一些 sleep (300 毫利斯)时,在 EDT 中的一个 invokeLater 调用和下一个调用之间引入时间间隙,它就像我想要的那样工作

在我看来,添加到 AWT 队列中的两个操作必须间隔一段时间,否则第二个操作将不起作用。我的意思是在对话框上 setVisible(true) ,然后在文本字段上 requestFocus() 。也许 requestFocus() 仅在看到绘制的对话框窗口时才起作用?

问题:我怎样才能让事情正常工作,一些同步方法,也许在调用 requestFocus() 之前检查对话框(可能很难,因为它在其他类中)。


解决方案:我忘记了最重要的事情 - 在调用 setVisible() 之后,我要做的下一步是调用 setEnabled(false),这样用户在数据填充完成之前无法执行任何操作。问题就在那里,在 setEnabled() 中,我还将任务添加到 AWT 队列(通过 invokeLater())。此任务导致后续步骤损坏。我现在要做的就是从主线程中的 invokeAndWait() 中调用 setEnabled(false) 来修复它。如果我理解正确的话,现在首先调用对话框弹出部分,然后主线程等待,直到 EDT 继续其工作,然后调用 setEnabled(false) 。因此从技术上讲,用户在绘制窗口后无法执行任何操作,这对我来说是有意义的。
不管怎样,感谢您的回复。

最佳答案

最好从对话框中调用焦点设置。将 WindowListener 添加到对话框并使用

public void windowOpened(WindowEvent e)
public void windowActivated(WindowEvent e);

将焦点设置在 JTextField 实例上

关于java - setVisible 和 requestFocus on textField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24624539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com