さて、これが今のところ私の最後の質問です:)とにかく、モードと呼ばれる文字列と、さまざまな関数によってプログラムで編集される行とコンポーネントと呼ばれるArrayListsがあります。すべてが正常に機能します。しかし、シリアル化された保存ファイルからロードすると、関数内からそれらの値を編集できなくなります。ロード後、モードの値を変更したり、これらの配列リストのいずれかに追加しようとすると、その関数内で変更が発生しますが、その関数が終了すると元の値に戻ります。ロード後に関数内からこれらのフィールドをグローバルに変更するにはどうすればよいですか?
public class Main implements Serializable {
ArrayList<Component> components = new ArrayList<Component>();
ArrayList<Connection> lines = new ArrayList<Connection>();
String mode = "";
void makeErase() {
mode = "erase";
header.setText("Click something to erase it");
}
abstract class Component extends JLabel implements MouseListener,
MouseMotionListener,
Serializable {
public void mousePressed(MouseEvent e) {
if (mode.equals("erase")) {
drawPanel.remove(this);
components.remove(this);
for (Input input : inputs) {
for (Connection connection : input.connections) {
System.out.println("hey");
drawPanel.remove(connection);
lines.remove(connection);
connection.output.connections.remove(connection);
}
}
}
void save() throws IOException {
String savepoint = "C:\\apcs\\hi.txt";
FileOutputStream fileOut = new FileOutputStream(savepoint);
ObjectOutputStream out = new ObjectOutputStream(fileOut);
for (Component c : components) {
for (Output o : c.outputs) {
for (Input i : o.inputsReceivingThis) {
}
}
}
ProjectState state = new ProjectState();
out.writeObject(state);
out.close();
fileOut.close();
}
void load() throws IOException, ClassNotFoundException {
ProjectState state;
String loadpoint = "C:\\apcs\\hi.txt";
FileInputStream fileIn = new FileInputStream(loadpoint);
ObjectInputStream in = new ObjectInputStream(fileIn);
state = (ProjectState) in.readObject();
in.close();
fileIn.close();
drawPanel.removeAll();
drawPanel.repaint();
components.remove(components);
lines.remove(lines);
components=state.projectComponents;
for (Component component : state.projectComponents) {
component.addMouseListener(component);
component.addMouseMotionListener(component);
drawPanel.add(component);
for (Output output : component.outputs) {
for (Input input : output.inputsReceivingThis) {
Connection c = new Connection(currentConnectionID, output, input);
lines.add(c);
}
}
}
}
}
class ProjectState implements Serializable {
ArrayList<Component> projectComponents;
ArrayList<Connection> projectLines;
public ProjectState() {
projectComponents = components;
projectLines = lines;
}
}
}