我写一个程序:
- 创建一个
JPanel
包含可一些形状物体MouseDragged
左右。 - 保存在二进制文件中这一类的对象与
ObjectOutputStream
- 检索从二进制文件(与对象
ObjectInputStream
),并增加了它在一个JFrame
。
我的问题是,我以后JPanel
被检索(因此反序列化,我把它),并添加到我JFrame
,我不能MouseDrag
我的形状了。 没有点击操作的实际工作。
我的老师告诉我,我可以通过解决这个问题validate()
方法,虽然我不是很确定为如何做到这一点。
你看不到变化的原因,是该类别的听众(即使序列,这可能是这种情况),也没有要他们应该是在与对方接触的对象的引用。 此外,他们没有被重新附连到他们被串行化之前附连到的组件。
作为一个例子,下面的例子不会与系列化工作,因为听众做一些事情,以“面板”,但没有办法听众可以“重新连接”来反序列化后的按钮,以及要注意的“谁”面板:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MyPanel extends JPanel {
private JPanel innerPanel;
private JLabel label;
private JButton button;
public MyPanel() {
super(new BorderLayout(10, 10));
innerPanel = new JPanel(new BorderLayout());
innerPanel.add(label = new JLabel("PANEL"), BorderLayout.CENTER);
button = new JButton("Remove label");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
panel.remove(label);
}
});
add(innerPanel, BorderLayout.CENTER);
add(button, BorderLayout.PAGE_END);
}
}