2

さて、これが今のところ私の最後の質問です:)とにかく、モードと呼ばれる文字列と、さまざまな関数によってプログラムで編集される行とコンポーネントと呼ばれる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;
      }
    }
}
4

0 に答える 0