如何在打开新的JFrame时禁用主JFrame

16

例如,我现在有一个主框架,其中包含一个JTable显示所有客户信息,并有一个创建按钮,可以打开一个新的JFrame,允许用户创建新的客户。我不希望用户能够打开多个创建框架。是否有任何Swing组件或API可以做到这一点?或者如何禁用主框架?类似JDialog的东西。

例如,现在我有一个主框架,其中包含一个JTable用于显示所有客户信息,并有一个“创建”按钮打开一个新的JFrame,允许用户创建新的客户。我希望防止用户打开多个“创建”框架。是否有任何Swing组件或API可以做到这一点?或者如何禁用主框架?类似JDialog的组件可实现该功能。
5个回答

21

当您尝试打开新的窗口时,我认为您应该使用以下代码来设置主jframe:

this.setEnabled(false);

该代码将禁用主窗口,使用户无法与它进行交互。

2
这么简单并且实际回答了OP的问题,你帮了我一个大忙。 - Ridzuan Adris
完美,应该成为“如何禁用主框架”的被接受答案。谢谢! - corporateWhore

12

我建议您将新客户对话框制作为模态JDialog,这样在其可见时,您不允许来自应用程序中其他对话框/窗体的输入。详细信息请参阅模态教程


嗨,它完全做到了我想要的。非常感谢。 - user236501
另一方面,模态用户界面非常令人讨厌,因此请考虑重新设计GUI以允许同时编辑多个不同的用户。 - KarlP

2

抱歉回复晚了,但您是否考虑过单例设计模式?它会在您需要该类时返回相同的类实例。因此,如果用户想要打开一个框架来输入详细信息,只会有一个框架打开(同一实例)。

具体实现如下:

private static MySingleFrame instance = null; //global var

private MySingleFrame() { } //private constructor 
private static MySingleFrame getInstance()
{

if(instance == null)
{
instance = new MySingleFrame();
}

//returns the same instance everytime MySingleFrame.getInstance() is called
return instance; 


}

1

只需在第一个框架上使用firstFrame.setVisible(false)。这将使其隐藏。

如果您想要更通用的方法,可以在某个地方引用当前显示的框架,并在新框架请求显示时更改它。

JFrame currentFrame;

void showRequest(JFrame frame)
{
  currentFrame.setVisible(false);
  currentFrame = frame;
  currentFrame.setVisible(true);
}

我希望主框架仍然存在,只是想确保用户只打开一个创建框架。我想禁用按钮,但还有其他好的实践方法可以实现吗? - user236501
1
你可以尝试使用__setFocusable(false)__,这将保留框架但用户将无法在其中单击任何内容。 - Jack
谢谢您的建议。我尝试了以下方式:createButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) {
... createFrame.setVisible(true); mainframe.setFocusable(false); } }); 但是在主框架上仍然可以点击“创建按钮”吗?
- user236501

1

您可以使用:

 private void btn_NewFormActionPerformed(java.awt.event.ActionEvent evt) { 

             this.hide();
             new Frm_NewFormUI().setVisible(true);

 }

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