【发布时间】:2014-08-20 20:47:14
【问题描述】:
我正在使用 JTabbedFrame 在 Java 中制作应用程序。每个选项卡都由扩展 JFrame 的单独类创建。我想通过在窗口关闭时将对象保存到文件中来保存每个选项卡的状态,并在创建选项卡时从文件中读取它们。我知道当你序列化一个对象时,所有的实例变量都会被保存,但是构造函数会发生什么?例如,当我在构建选项卡框架的类中说:
public class Jtab{
private ClassThatExtendsJFrame tab;
public Jtab(ClassThatExtendsJFrame tab){
this.tab = tab; // what happens here? Is the constructor called?
JTabbedPane tabs = new JTabbedPane();
tabs.addTab("name", icon, this.tab, "tooltip");
}
}
所有布置 JFrame 的代码当前都在构造函数中。布局中的所有 JLabels 和元素都是我在构造函数中分配的类的属性。所以我看到可能发生两种选择:调用构造函数并重置所有变量,或者不调用构造函数并且未创建我的布局。完成我想做的事情的最佳方法是什么?
【问题讨论】:
-
您需要知道的第一件事是每个变量都是指向内存中某个点的指针。当您将一个变量分配给另一个变量时,您实际上是将右侧变量的内存地址分配给左侧变量。意味着知道两个变量都指向内存中的相同位置以及那里包含的内容...
-
那么,这是否意味着内存中的这些位置会自动知道它们应该在屏幕上的位置?
-
没有。对象知道此信息(通过其存储在内存中的属性)。定位由许多与问题没有直接关系的不同因素决定...
-
所以我需要调用其他方法来设置布局,但是 JLabels 和文本字段在保存时会有数据。
-
是的,您需要分配一个布局管理器,它会根据容器的要求更新容器的组件。你是什么意思“当他们得救”?对象是一个自包含的实体,所以是的,一旦应用,这些值将由对象本身维护,并且对同一对象(或内存位置)的所有引用都将具有相同的信息,因为它是相同的数据 ...
标签: java swing serialization constructor