【问题标题】:How to disable main JFrame when open new JFrame打开新 JFrame 时如何禁用主 JFrame
【发布时间】:2011-03-03 00:38:31
【问题描述】:

现在的例子我有一个包含 jtable 显示所有客户信息的主框架,并且有一个创建按钮来打开一个新的 JFrame,允许用户创建新客户。我不希望用户可以打开多个创建框架。任何 Swing 组件或 API 都可以做到这一点?或者如何禁用主框架?像 JDialog 这样的东西。

【问题讨论】:

    标签: java swing jframe


    【解决方案1】:

    你可以使用:

     private void btn_NewFormActionPerformed(java.awt.event.ActionEvent evt) { 
    
                 this.hide();
                 new Frm_NewFormUI().setVisible(true);
    
     }
    

    【讨论】:

      【解决方案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; 
      
      
      }
      

      【讨论】:

        【解决方案3】:

        我认为当您尝试打开新的 jframe 时,应该将此代码用于主 jframe:

        this.setEnabled(false);

        【讨论】:

        • 这么简单,实际上回答了OP问题,你有帮助我。
        • 完美,应该是“如何禁用主框架”的公认答案。谢谢!
        【解决方案4】:

        我建议您将新客户对话框设置为模态JDialog,这样您就不允许在应用中的其他对话框/框架可见时进行输入。详情请查看modality tutorial

        【讨论】:

        • 嗨,它完全符合我的要求。非常感谢
        • 另一方面,模态用户界面非常烦人,因此请考虑重新设计 GUI 以允许同时编辑多个不同的用户。
        【解决方案5】:

        只需在第一帧上使用firstFrame.setVisible(false)。这将使它隐藏..

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

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

        【讨论】:

        • 我希望主框架还在,只是想确保用户只打开一个创建框架。我正在考虑禁用按钮,但还有其他好的做法可以实施吗?
        • 您可以尝试使用 .setFocusable(false),这将保留框架但不允许用户单击其中的任何内容..
        • 感谢您的建议。我尝试像 createButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { ... createFrame.setVisible(true); mainframe.setFocusable(false) ); } });但是我仍然可以点击主框架上的创建按钮?
        猜你喜欢
        • 1970-01-01
        • 2022-12-03
        • 2016-12-02
        • 1970-01-01
        • 2013-04-09
        • 1970-01-01
        • 2016-04-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多