我有一个带有两个标签的简单JTabbedPane组件。当其中一个选项卡上触发按钮事件时,我希望当前视图立即设置为另一个选项卡 。我可以使用相关按钮的actionPerformed方法中的setSelectedIndex(int)成功获取当前选项卡,但是按钮事件的其余功能有时可能需要一段时间才能完成。
似乎setSelectedIndex(int)更改不会立即发生,并且仅在按钮单击/按下触发的actionPerformed方法的主体完成时才会发生。
我想在单击/按下按钮时切换标签的原因是,用户可以在另一个标签上的文本区域中看到一条消息,告诉他们“处理,请稍候”等等。执行按钮单击功能。该功能的结果,当它们到达时,将取代“......请等待”消息。
所以现在发生的事情是我单击按钮,它会在该选项卡上冻结,直到按钮功能完全完成,然后切换。所以“......请等待”的消息实际上从未见过。
我不知道该怎么做。可能会为“功能”创建一个新线程,并让按钮单击事件启动线程,以便按钮事件可以完成并在等待结果时切换选项卡。 只是大声思考。任何帮助表示赞赏。
-Rob
答案 0 :(得分:2)
听起来好像你的线程问题比什么都重要,这会冻结你的GUI,使它完全没有响应,直到它完成,从而延迟你的选项卡式窗格交换。如果您在执行动作的方法中运行任何长时间运行的进程,请在后台线程中执行它们,例如由SwingWorker提供,然后您的GUI将变得更具响应性。
有关详细信息,请查看本教程:Concurrency in Swing
如果不顾这个建议,你仍然遇到问题,那么你可能不得不发布一些有问题的代码。如果您可以创建一个可以重现问题的小型可编辑且可运行的应用程序SSCCE,那将是最好的。