如何在运行时创建对象时动态关闭 JInternal Frame
How to close JInternal Frame Dynamically when object is created at runtime
- 我正在通过从 JTextField 获取名称来打开
JInternal
框架
然后 ** 在 运行 时间创建它的对象**,问题是如果我
在 textBox 中写入 10 次不同的内部框架名称,然后单击按钮,它每次都会打开新的 JInternal
框架。
- 现在我想要每当新
JInternal
框架打开,前一个
JInternalFrame 应该自动关闭。
- 我知道这样做很容易,但我的情况很难,因为我
在 运行 时间创建它的对象,我该怎么做。
按钮后面的代码如下
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);
}
}
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=] 了解更多信息)。
- 我正在通过从 JTextField 获取名称来打开
JInternal
框架 然后 ** 在 运行 时间创建它的对象**,问题是如果我 在 textBox 中写入 10 次不同的内部框架名称,然后单击按钮,它每次都会打开新的JInternal
框架。 - 现在我想要每当新
JInternal
框架打开,前一个 JInternalFrame 应该自动关闭。 - 我知道这样做很容易,但我的情况很难,因为我 在 运行 时间创建它的对象,我该怎么做。
按钮后面的代码如下
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); } }
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=] 了解更多信息)。