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

时间:2018-05-22 21:08:11

标签: java swing netbeans jinternalframe

  • 我通过从JTextField获取其名称来打开JInternal帧 然后**然后在运行时创建它的对象**,问题是,如果我 在textBox中写入10次不同的内部框架名称,然后单击按钮,每次打开新的JInternal框架。
  • 现在我希望每当JInternal框架打开时,之前 JInternalFrame应该自动关闭
  • 我知道这很容易做到,但我的情况很难因为我 在运行时创建它的对象,我该怎么做。
  • 我的代码behine Button正在关注

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    
        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();
          obj1.setVisible(true);
     jPanel1.add(obj1);                // now in there i want that whenever i click the button , it check either is there any Jinternal frame is open already or not  if yes then close the previously open JFrame 
    
     }
      catch(Exception e)
      {
        System.out.println("error "+e);
     }
    
       } 
    

1 个答案:

答案 0 :(得分:1)

  

我知道这很容易做到,但我的情况很难,因为我在运行时创建它的对象,我该怎么做。

运行时没有任何神奇之处,这与你通常关闭它的方式有什么不同。秘诀在于可以随时获得JInternalFrame的引用。解决方案是使用JInternalFrame字段(非静态实例变量)来保存引用,而不是像您当前那样使用 local 变量。这里的关键是要理解引用是重要的,更重要的是变量。如果您需要一个在方法结束时仍然存在的引用变量,那么该变量不能在方法中声明,但应该在类级别上。

类似的东西:

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);
        }
    } 
}

请注意,此代码尚未经过测试,不适用于复制和粘贴解决方案,但为您提供一般概念。

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