【发布时间】:2011-04-17 13:53:25
【问题描述】:
我有一个带有两个选项卡的简单 JTabbedPane 组件。当在其中一个选项卡上触发按钮事件时,我希望将当前视图设置为另一个选项卡立即。我可以在相关按钮的 actionPerformed 方法中使用 setSelectedIndex(int) 成功切换当前选项卡,但按钮事件的剩余功能有时可能需要一段时间才能完成。
似乎 setSelectedIndex(int) 更改不会立即发生,只有当按钮单击/按下触发的 actionPerformed 方法的主体完成时才会发生。
我想在单击/按下按钮时切换选项卡的原因是,用户可以在另一个选项卡的文本区域中看到一条消息,告诉他们“正在处理,请稍候”等,而其余的执行按钮单击功能。该功能的结果在到达时将替换“...请稍候”消息。
所以现在发生的事情是我单击按钮,它在该选项卡上冻结,直到按钮功能完全完成,然后它切换。所以“...请稍候”的消息实际上是从未见过的。
我不知道该怎么办。也许为“功能”创建一个新线程,并让按钮单击事件启动线程,以便按钮事件可以在等待结果时完成并切换选项卡。 只是大声思考。任何帮助表示赞赏。
-罗伯
【问题讨论】:
-
您可能想要做的实际上是不同的:如果您考虑一下并查看复杂的应用程序(例如 IDE),您会发现它们通常不会打扰 “请稍候” 消息嵌入在每个选项卡/子选项卡/子屏幕/应用程序的任何内容中。他们所做的是放置一个可以从应用程序的任何部分看到的进度条,并从用户所在应用程序的任何“部分”更新该进度条。与某些浏览器始终显示的方式不同每个页面加载的 % 总是在同一个位置。在我看来,这是一个更好的设计。
-
一个进度条会很棒,但我有点着急,我肯定没有时间来实现跟踪剩余时间。我明白你的意思,不过,当你说只是将消息放在应用程序的某个通用区域时,我可能会考虑。
标签: java swing jtabbedpane