Вызовите другую функцию в GUI из другого класса в Filewriter - PullRequest
0 голосов
/ 16 ноября 2018

При нажатии «Создать отчет» будет создан текстовый файл. Он будет иметь заголовок из label1, дату и время (уже есть код для всего этого ниже) и имя действия и продолжительность действия, которые были введены пользователем в jTextArea в форме «имя действия, продолжительность, родитель + имя активности, продолжительность, родитель» здесь разделитель + DisplayGUI.java

else if(str.equals("Generate Report"))
    {

            try {
                String filename = JOptionPane.showInputDialog("Please input a filename:");
                FileWriter fw = new FileWriter("D:\\" + filename + ".txt");
                BufferedWriter buffer = new BufferedWriter(fw);
                String title="Title: "+lb1.getText();
                DateFormat dateFormat = new SimpleDateFormat("MM/dd/YYYY HH:mm:ss");
                Date date = new Date();
                buffer.write(title);
                buffer.newLine();
                buffer.newLine();
                buffer.write("\nDate and Time of Creation: "+dateFormat.format(date));

                buffer.newLine();
                buffer.newLine();
                buffer.write("\nList of activities & their duration:"); //STILL NEED TO WRITE CODE FOR THIS





                buffer.newLine();
                buffer.newLine();
                buffer.write("List of all paths with the activity names and total duration:");
                buffer.newLine();             
                String txtArea=ta1.getText();
                String[] txtArray= txtArea.split("\n");
                for(int i=0;i<txtArray.length;i++)
                {
                 buffer.write(txtArray[i]);
                 buffer.newLine();
                }
               buffer.close();
               ta1.setText("Report Generated");



                buffer.close();
            }
            catch (Exception e) {
                System.out.println(e);
            }
    }

Node.java // этот класс видит имя и продолжительность действия, а также родителей для каждого узла, введенного пользователем

  import java.util.ArrayList;

public class Node {

private String activityName;
private int duration;
private ArrayList<String> parents = new ArrayList<String>();
private boolean end;

public Node() {
    this.activityName = "ExampleActivity";
    this.duration = 1;
    this.parents.add("null");
    this.end = false;
}
public Node(String activityName, int duration, ArrayList<String> parents) {
    this.activityName = activityName;
    this.duration = duration;
    this.parents = (ArrayList<String>) parents.clone();
    this.end = false;
}
public String getActivityName() {
    return activityName;
}
public void setActivityName(String activityName) {
    this.activityName = activityName;
}
public int getDuration() {
    return duration;
}
public void setDuration(int duration) {
    this.duration = duration;
}
public ArrayList<String> getParents() {
    return parents;
}
public void setParents(ArrayList<String> parents) {
    for(int i=0;i<parents.size();i++) {
        this.parents.add(parents.get(i));
    }
}
public boolean getEnd() {
    return end;
}
public void setEnd( ArrayList<Node> nodes  ){
    for( Node node : nodes ) {
        if( node.parents.contains( this.activityName ) ) return;
    }
    this.end = true;
}
@Override
public String toString() {
    return "Node [activityName=" + activityName + ", duration=" + duration
            + ", parents=" + parents + ", end=" + end + "]";
}
}

NodeBuilder.java // Этот класс создает каждый узел

import java.util.ArrayList;
import java.util.Scanner;

public class NodeBuilder {
    ArrayList<Node> nodes = new ArrayList<Node>();

ArrayList<String> parents = new ArrayList<String>();

public int add(String input) {

        //Receive user node input
        String activityName;
                    int duration;

        //Setting up new Scanner and delimiter
        Scanner s = new Scanner(input);
        s.useDelimiter(",");

        //Set node variables with user input
        if(s.hasNext()) {
            activityName = s.next();
            //System.out.println(activityName);
        } else
            return(-1);

        if(s.hasNextInt()) {
            duration = s.nextInt();
            //System.out.println(duration);

        } else
            return(-1);


        while (s.hasNext()) {
            parents.add(s.next());
        }

        Node myNode = new Node(activityName, duration, parents);
        nodes.add(myNode);
        parents.clear();

        //System.out.println(parents.size());
        //System.out.println(nodes.size());

        //reset parents ArrayList


        //Closing Scanner
        s.close();
        return(0);

    }


            public String computeNetwork(boolean onlyCrits) {
                String pathsString = "";

                for(Node node : nodes) {
                        node.setEnd( nodes );
                }

                //Error checking
                int errors = 0;
                for(int x=0;x<nodes.size();x++) {
                        boolean haskids = hasKids(nodes.get(x),nodes);
                        if(haskids==false && nodes.get(x).getParents().isEmpty()) {
                                errors = 1;
                                return("ERROR: One or more nodes are not connected to the other nodes. \nPlease reset and enter a new sequence of nodes that are connected.");

                        }
                }

                if(errors == 0) {
                        pathsString = NetworkBuilder.networkBuilder(nodes, onlyCrits);
                }
                return(pathsString);
            }
    public String changeDuration(boolean onlyCrits, String activity, int newDuration){



            int changed = 0;
            for(int j=0;j<nodes.size();j++) {
                if(nodes.get(j).getActivityName().equals(activity) && changed == 0) {
                    nodes.get(j).setDuration(newDuration);
                    changed = 1;
                }
            }
            return(NetworkBuilder.networkBuilder(nodes, onlyCrits));


    }


static boolean hasKids(Node node, ArrayList<Node> nodes) {
    for(int i=0;i<nodes.size();i++) {
        if(nodes.get(i).getParents().contains(node.getActivityName())) return true;
    }
    return false;
}
}
...