如何在运行时创建对象时动态关闭 JInternal Frame

How to close JInternal Frame Dynamically when object is created at runtime

I know it's pretty easy to do that but my case is difficult because i creats its object at run time, how can i do it.

运行时没有什么神奇之处使它与您通常关闭它的方式有任何不同。秘诀在于有一个随时可用的 JInternalFrame 引用。一种解决方案是使用 JInternalFrame 字段(一个非静态实例变量)来保存引用,而不是像您当前所做的那样使用 local 变量。这里的关键是要理解引用比变量更重要。如果您需要一个在方法结束时持续存在的引用变量,则该变量不能在方法内声明,但应该在 class 范围内。

类似于:

public class MyGui {
    // instance field to hold reference to currently displayed JInternalFrame
    private JInternalFrame currentInternalFrame = null;

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {        
        if (currentInternalFrame != null) {
            currentInternalFrame.dispose(); // clear current one
        }

        String st = TextField.getText().toString(); // in TextField i enter the JInternal Frame Name
        String clazzname = "practice."+st;         // practice is the package name  
        try {

            // JInternalFrame obj1 = (JInternalFrame) Class.forName( clazzname ).newInstance();

            currentInternalFrame = (JInternalFrame) Class.forName( clazzname ).newInstance();

            currentInternalFrame.setVisible(true);
            jPanel1.add(currentInternalFrame);           
        } catch(Exception e) {
            System.out.println("error "+e);
        }
    } 
}

请注意,此代码尚未经过测试,并非用于复制和粘贴解决方案,而是为了给您一个大概的概念。

另一个不相关的问题是程序设计:用户通常不喜欢 windows 打开和关闭,也许对您的用户来说更好的程序结构是通过 CardLayout 交换 JPanel 视图(请阅读 [= =12=] 了解更多信息)。