-1

Background:

I have about 4 buttons and I would like to write to file every time the button is clicked. So far when I writeToFile(); like in the deleteStudentActionPerformed method it deletes all of the students from all of the courses.

Questions:

Can I call this method in my actionPerformed methods?

I've updated this post with more complete code to let everyone see what I am trying to accomplish.

Course.java

package coursestudent;

import java.util.ArrayList;


public class Course { //one course, multiple students

//fields / instance variables
private String courseName;
//stores a list of students
private ArrayList<String> studentList = new ArrayList();

//methods

public void setCourseName(String name)
{
    courseName = name;
}

public String getCourseName()
{
    return courseName;
}

//add one student
public void addStudent(String studentName)
{
    studentList.add(studentName);
}

//delete one student
public void deleteStudent(int index)
{
    studentList.remove(index);
}

//get student list
public ArrayList<String> getStudentList()
{
    return studentList;
}
  public boolean isEmpty()
{
    if (studentList.isEmpty())
        return true;
    else
        return false;

}





}

CourseApp.java

package coursestudent;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;


public class CourseApp extends javax.swing.JFrame {

//courseData will store a list of courses
HashMap<String, Course> courseData = new HashMap<String, Course>();
//file name
final String FILENAME = "course.txt";

/**
 * Creates new form CourseApp
 */
public CourseApp() {

    initComponents();

    //reads from file course.txt
    readFile();

    //add courses to combobox
    for(String coursename : courseData.keySet())
    {
        courseCombobox.addItem(coursename);
    }
}

//method to read from course.txt and put data in variable courseData
public void readFile()
{
    BufferedReader bw = null;
    try {
        bw = new BufferedReader(new FileReader(FILENAME));

        //reads the first line of file
        String line = bw.readLine();

        while(line!=null)//while it is not the end of file
        {
            //parses this line
            //find index of "<<<<"
            int index = line.indexOf("<<<<");
            //call subString to return the course Name
            String courseName = line.substring(0,index);//returns course name
            String studentName = line.substring(index+4);

            //make a course Object

            //if hashmap has the key already
            //add one more student 
            if(courseData.containsKey(courseName))
            {
                //get the course object
                Course c = courseData.get(courseName);
                c.addStudent(studentName);
            }
            else//add one new course
            {

                Course cObj = new Course();
                cObj.setCourseName(courseName);
                cObj.addStudent(studentName);
                courseData.put(courseName, cObj);
            }

            //read next line
            line = bw.readLine();

        }
    } catch (FileNotFoundException ex) {
        Logger.getLogger(CourseApp.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(CourseApp.class.getName()).log(Level.SEVERE, null, ex);
    }
    finally
    {
        try {
            bw.close();
        } catch (IOException ex) {
            Logger.getLogger(CourseApp.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}
    public void writeToFile()
{

    PrintWriter out = null;

    try
    {
        out = new PrintWriter(new BufferedWriter(new FileWriter("course.txt")));

        for (String courseName:courseData.keySet())
        {

            Course course = courseData.get(courseName);
            if(!course.isEmpty())
            {

                ArrayList<String> students = course.getStudentList();
                for (String s : students)
                {
                    out.println(courseName + "<<<<");                        
                }
            }
            else
            {
                out.println(courseName + "<<<<");
            }
        }
    } catch (IOException ex)
    {
        Logger.getLogger(CourseApp.class.getName()).log(Level.SEVERE, null, ex);
    }
    finally
    {
        out.close();
    }
}

/**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")



// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    courseCombobox = new javax.swing.JComboBox<>();
    addcourseButton = new javax.swing.JButton();
    addTextField = new javax.swing.JTextField();
    jScrollPane1 = new javax.swing.JScrollPane();
    studentListBox = new javax.swing.JList<>();
    addstudentButton = new javax.swing.JButton();
    deletestudentButton = new javax.swing.JButton();
    deletecourseButton = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    courseCombobox.addItemListener(new java.awt.event.ItemListener() {
        public void itemStateChanged(java.awt.event.ItemEvent evt) {
            courseComboboxItemStateChanged(evt);
        }
    });

    addcourseButton.setText("Add Course");
    addcourseButton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            addcourseButtonActionPerformed(evt);
        }
    });

    jScrollPane1.setViewportView(studentListBox);

    addstudentButton.setText("Add Student");
    addstudentButton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            addstudentButtonActionPerformed(evt);
        }
    });

    deletestudentButton.setText("Delete Student");
    deletestudentButton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            deletestudentButtonActionPerformed(evt);
        }
    });

    deletecourseButton.setText("Delete Course");
    deletecourseButton.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            deletecourseButtonActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(64, 64, 64)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(addTextField)
                    .addComponent(courseCombobox, 0, 127, Short.MAX_VALUE))
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 232, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGap(68, 68, 68)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(deletestudentButton, javax.swing.GroupLayout.DEFAULT_SIZE, 113, Short.MAX_VALUE)
                .addComponent(deletecourseButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(addstudentButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(addcourseButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addGap(73, 73, 73))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(42, 42, 42)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(courseCombobox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(addcourseButton))
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(34, 34, 34)
                    .addComponent(addTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createSequentialGroup()
                    .addGap(18, 18, 18)
                    .addComponent(addstudentButton)))
            .addGap(24, 24, 24)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(14, 14, 14)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createSequentialGroup()
                    .addGap(2, 2, 2)
                    .addComponent(deletecourseButton)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addComponent(deletestudentButton)))
            .addContainerGap(136, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>                        

private void addcourseButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                
    // TODO add your handling code here:
    //1. read text from text field
    String newcourseName = addTextField.getText();

    //2. create a course object
    //initializes the course name
    Course newcourseObj = new Course();
    newcourseObj.setCourseName(newcourseName);

    //3. add this new course to the hashmap
    //use put(key, value) method to add a new course
    courseData.put(newcourseName, newcourseObj);

    //update combobox

    courseCombobox.addItem(newcourseName);

      if (addTextField.getText().equals("")){

        JOptionPane.showMessageDialog(null, "Missing A Course Name!", "Missing A Course Name!", JOptionPane.ERROR_MESSAGE);


    }

    //4..to be continued (update file)

}                                               

private void courseComboboxItemStateChanged(java.awt.event.ItemEvent evt) {                                                
    // TODO add your handling code here:
    //step1 : get selected course name from the combobox
    //CIS 304 OR ACC 207

    String courseName = courseCombobox.getSelectedItem().toString();

    //step2: retrieve the course object from the hashmap courseData using course name
    //value will be returned after key is provided
    Course cObj = courseData.get(courseName);


    //step3: get the student list from the course object(getStudents())
    ArrayList<String> studentlist = cObj.getStudentList();


   //step4: add student names to the list box
   //defaultlistmodel
   DefaultListModel model = new DefaultListModel();

   //enhanced for loop
   for(String name: studentlist)
   {
       model.addElement(name);
   }

   //link the model with listbox
   studentListBox.setModel(model);






}                                               




private void addstudentButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                 
    // TODO add your handling code here:
    //step1: get course name
    String courseName = courseCombobox.getSelectedItem().toString();

    //step2: get student
    String studentName = addTextField.getText();


    //step3: retrieve the course object from the hashmap
    Course cObj = courseData.get(courseName);

    //step4: add this student
    cObj.addStudent(studentName);

    //Update Model
    DefaultListModel model = (DefaultListModel)studentListBox.getModel();
    model.addElement(studentName);



    if (addTextField.getText().equals("")){

        JOptionPane.showMessageDialog(null, "Missing A Students Name!", "Missing A Students Name!", JOptionPane.ERROR_MESSAGE);


    }
    //to be continued

}                                                

private void deletestudentButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                    
    // TODO add your handling code here:
    String courseName = courseCombobox.getSelectedItem().toString();

    Course cObj = courseData.get(courseName);

    List<String> studentNames = studentListBox.getSelectedValuesList();

    DefaultListModel model = (DefaultListModel)studentListBox.getModel();
    //loop to delete all the students from the hash map

    for(String student: studentNames)
    {
        cObj.getStudentList().remove(student);
        model.removeElement(student);
    }

     if (addTextField.getText().equals("")){

    writeToFile(); 

        JOptionPane.showMessageDialog(null, "Missing A Students Name!", "Missing A Students Name!", JOptionPane.ERROR_MESSAGE);

    }
    // to be continued



}                                                   

private void deletecourseButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                   
    // TODO add your handling code here:
    //read text box
     String newcourseName = addTextField.getText();

      Course newcourseObj = new Course();
    newcourseObj.setCourseName(newcourseName);

     //3. add this new course to the hashmap
    //use put(key, value) method to add a new course
    courseData.remove(newcourseName, newcourseObj);

    //update combobox

    courseCombobox.removeItem(newcourseName);


     if (addTextField.getText().equals("")){

        JOptionPane.showMessageDialog(null, "Missing A Course Name!", "Missing A Course Name!", JOptionPane.ERROR_MESSAGE);


    }


}                                                  






/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(CourseApp.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(CourseApp.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(CourseApp.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(CourseApp.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new CourseApp().setVisible(true);
        }
    });
}


// Variables declaration - do not modify                     
private javax.swing.JTextField addTextField;
private javax.swing.JButton addcourseButton;
private javax.swing.JButton addstudentButton;
private javax.swing.JComboBox<String> courseCombobox;
private javax.swing.JButton deletecourseButton;
private javax.swing.JButton deletestudentButton;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JList<String> studentListBox;
// End of variables declaration                   

}

This is my first time posting on here. Is it not proper to pose two questions? Thank You!

D_DOT
  • 1
  • 3
  • 1
    *"What will that look like."* It would look like Java code. Try writing some and get back to us when you have a **specific** question and a [mcve] of your attempt. – Andrew Thompson Jun 04 '18 at 03:13
  • Why can't you call `writeToFile` instead `deletecourseButtonActionPerformed`? – MadProgrammer Jun 04 '18 at 03:27
  • `private void deletecourseButtonActionPerformed(java.awt.event.ActionEvent evt) {/* do what you need*/ writeToFile();}` – c0der Jun 04 '18 at 03:36
  • No reason to think it wouldn't work. Try it and see. – Kevin Anderson Jun 04 '18 at 03:39
  • Thanks c0der! It worked! Now I just need to build on that to figure out why it deleted all my students and wrote that to file! Appreciate you! – D_DOT Jun 04 '18 at 03:47

1 Answers1

0

If you want to call writeToFile inside the method actionPerformed, it depends on the structure you are using. Are these methods within the same class?

If yes:

import java.awt.event.ActionEvent;

public class Thing {

  private void deleteCourseButton(ActionEvent event) {
    // STUFF YA KNOW

    // Call the helper method
    if (somethingHappens) {
      writeToFile();
    }

    // OTHER STUFF
  }

  // The helper method to be called
  private void writeToFile() {
    // Do something fun
  }

}

If no, you will need to import the class that contains writeToFile, instantiate an aobject of that class, and call writeToFile on that object:

public class Thing1 {

  public void writeToFile() {
    // Fun stuff right here
  }

}

*and:

import Thing1;
import java.awt.event.ActionEvent;

public class Thing2 {

  private void deleteCourseButton(ActionEvent event) {
    // stuff heh

    if (condition) {
      // Instantiate object
      Thing1 thing1= new Thing1();
      // Call the object's method
      thing1.writeToFile();
    }

    // otherStuff
  }

}

Note that if the classes are in two different packages, the import becomes:

import packageNameHere.Thing1;

Also note the different visibility modifiers. If the methods are in the same class, both can be private and still call each other. If they are in different classes, the method to be called outside of its native class cannot be private so make it public to keep things simple for now.

Not sure what you are trying to make, but this is a simple answer. You might need to make use of multi-threading and infinite loops, depending.

Ders
  • 1,068
  • 13
  • 16