如何使JDialog保持最顶层但不是模态的?

4
我正在创建一个小程序。该程序需要从数据库中获取一些大块数据,但这个操作很慢......因此我想创建一个“加载”JDialog,当小程序从数据库中加载数据时,该对话框将显示在小程序的顶部,但它不应该阻止用户输入小程序。
如何做到这一点?如果我创建了一个“setAlwaysOnTop(true)”的JDialog,它将无法显示在最上面。如果我将其设置为模态,它将显示但不允许我的小程序与数据库通信。我甚至尝试将“loading”窗口设为可运行,并从另一个线程运行它,但没有成功。
如何为小程序创建一个适用于所有情况的“loading” JDialog,它不会是模态的,但仍然始终保持在顶部呢?
1个回答

2

从非EDT线程调用swing/awt通常是一个非常糟糕的想法(我是说非常非常糟糕)。请注意,在OSX和Windows中,使用applet JFrame/JDialog存在许多问题。在我看来,如果您的applet直接在UI中使用JProgressBar或类似的东西,将会为用户提供更好的体验。如果您绝对必须弹出窗口,请使用具有AlwaysOnTop=true属性的JFrame。您得到奇怪行为的原因可能是您没有使用带有父组件的构造函数或者只是传递了一个null值。


是的,我没有将父对象传递给“super”,但似乎我无法这样做,因为JDialog没有一个以Applet作为父对象的构造函数... - guest86
返回翻译后的文本:true,但您可以使用类似于此new JDialog(SwingUtilities.windowForComponent(yourJapplet))。我不明白为什么您必须使用JDialog,因为您不需要模态或其他任何东西。 - Andrew Butenko
我需要使用它,因为我正在重构现有的非常复杂的小程序(它类似于用于管理投注数据库的独立应用程序),所以我不能完全改变它,它必须保持为小程序 :) - guest86

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接