Java 如何在代码上只创建一个JFrame而不是多个JFrame?

Java 如何在代码上只创建一个JFrame而不是多个JFrame?,java,jframe,Java,Jframe,我一直在寻找如何限制我的jFrame每次点击时只打开一个,但没有成功。我的代码如下: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: login = true; InserirCliente tela_inserir = ne

我一直在寻找如何限制我的jFrame每次点击时只打开一个,但没有成功。我的代码如下:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    login = true;
    InserirCliente tela_inserir = new InserirCliente(login);
    jDesktopPane1.add(tela_inserir);
    tela_inserir.setVisible(true);
}                                        

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    login = false;
    InserirCliente tela_inserir = new InserirCliente(login);
    jDesktopPane1.add(tela_inserir);
    tela_inserir.setVisible(true);
}    
还有一个JInternalFrame,带有:

public InserirCliente(boolean login){
    initComponents();
    if(login){
        jPanel1.setVisible(false);
    }
    else {

    }
}  

非常简单,只是测试一下而已。但是,当它被点击时,它怎么能被改变为只显示第一个而不超过第一个呢?如果已经创建了JInternalFrame的实例,是否有句柄可以接收?

首先,根据需要将
tela\u inserir
设置为公共/私有变量:

private InserirCliente tela_inserir;
现在将以下方法添加到InserirCliente类中:

public Boolean checkVisible(){
    if(jPanel1 != null){
        return jPanel1.isVisible();
    }
    return false;
} 
现在只需检查内部JPanel是否为null(尚未创建)并且在按下按钮时不可见:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    //Only show new panel if i is not already visible:
    if (tela_inserir == null && tela_inserir.checkVisible() == false){
        login = true;
        tela_inserir = new InserirCliente(login);
        jDesktopPane1.add(tela_inserir);
        tela_inserir.setVisible(true);
    }
}                                        

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    //Only show new panel if i is not already visible:
    if (tela_inserir == null && tela_inserir.checkVisible() == false){
        login = false;
        InserirCliente tela_inserir = new InserirCliente(login);
        jDesktopPane1.add(tela_inserir);
        tela_inserir.setVisible(true);
    }
}   

创建负责创建/管理框架的经理或工厂。当它被要求“打开”帧时,它应该检查它的内部缓存,以确定帧是否存在,如果不存在,则创建它,如果它没有找到答案,则可能将其放在前面@Sorifind,我在项目中更改了一些内容,现在我使用一个按钮向用户添加新地址。但是你的代码在这里不起作用。我在“clientcreator”中创建了新JForm的私有变量,并用一个新按钮“addaddress”插入了您的代码。可能是“tela_inserir.checkVisible()”部分导致了错误。因为我不知道您编写的函数的jPanel1是什么,所以我创建了一个表单并将其放入tela_inserir中。无论如何,运气不好,但是谢谢,但是我在我的内部表单中使用了一个静态变量isOpen,它可以在“addaddress”按钮中进行操作。因此,如果isOpen为false,它可以创建新的JForm并将isOpen设置为true。退出新JForm时,isOpen等于false,一切按此进行:D