2012-06-25 27 views
4

我正在创建一个小程序。该小程序必须从数据库中获取一些大块数据,并且操作很慢......这就是为什么我想要创建一个“加载”JDialog,它将显示在小程序顶部,而小程序正在从数据库,但它不应该阻止用户输入到小程序。
如何做到这一点?如果我创建一个“setAlwaysOnTop(true)”的JDialog,它将不会显示在顶部。如果我将它设置为模态,它会显示,但它不会允许我的小程序与数据库进行通信。我甚至试图让“加载”窗口运行并从另一个线程运行,没有运气。如何使JDialog最顶级但不是模态?

如何为applet创建正确的,通用的“加载”JDialog,它不会是模态的,但会始终保持最佳状态?

回答

2

从非EDT线程调用swing/awt 通常是一个非常糟糕的主意(我的意思是非常非常糟糕的主意)。敬请期待,JFrame/JDialog小应用程序在OSX和Windows中的工作方式有许多问题。如果你的applet直接使用JProgressBarr或者什么在你的applets UI中,那么IMO会为用户提供更好的体验。如果您绝对必须弹出窗口,请使用AlwaysOnTop=true的JFrame。你越来越奇怪的行为的原因是你可能不使用带父组件的构造函数,或者只是传入一个null值。

+0

这是真的,我没有通过父“超”,但它似乎我不能导致JDialog没有一个构造函数,需要Applet作为父... – guest86

+0

真的,但你可以使用这样的东西'新的JDialog(SwingUtilities.windowForComponent(yourJapplet))'。我不明白为什么你必须使用JDialog,它不像你需要的形式或任何东西。 –

+0

我需要使用它,因为我正在重构现有和非常复杂的applet(它就像一个管理投注数据库的独立应用程序),所以我不能完全改变它,它必须保持为applet :) – guest86