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);
}
}
答案 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了解更多信息)。