带有最大化按钮的Java模态窗口

我怎么能创建一个模态窗口并具有最大化按钮?
那么是否可以创建一个模态JFrame或创建一个带有最大化按钮的JDialog

在大多数外观和感觉上,模态窗口(例如JDialog )没有最大化按钮,因为它们根本不应该被最大化(或最小化)。

使用一些技巧可以添加一个maximise按钮,但它将完全违背JDialog工作方式。 如果您需要最大化按钮,最好的解决方案是使用JWindowJFrame而不是JDialog 。 那些窗口支持最大化和最小化。


警告:无论如何,你都不应该这样做。

JDialog执行此操作的技巧:

 setUndecorated(true); getRootPane().setWindowDecorationStyle(JRootPane.FRAME); 

解决方案1:在Windows上测试

我使用JFrame作为模态窗口

 JFrame mainWindow = new JFrame; mainWindow.setVisible(true); JFrame modalWindow = new JFrame(); // The next two sentences gives modalWindow modal beahaviour mainWindow.setEnabled(false); mainWindow.setFocusable(false); modalWindow.setVisible(true); 

解决方案2:在Ubuntu上测试

我添加了一个WindowFocusListener

 addWindowFocusListener(new java.awt.event.WindowFocusListener() { public void windowGainedFocus(java.awt.event.WindowEvent evt) {} public void windowLostFocus(java.awt.event.WindowEvent evt) { formWindowLostFocus(evt);} private void formWindowLostFocus(java.awt.event.WindowEvent evt) { this.requestFocus(); this.toFront();} 

这是另一个答案。

试试你是否错过最大化按钮? 作者:Santhosh Kumar。

它是一个实用程序类,使Frame模仿对话框。