Как я могу вызвать этот метод в моем ButtonActionPerformed - PullRequest
0 голосов
/ 04 июня 2018

Фон:

У меня есть около 4 кнопок, и я хотел бы записывать в файл каждый раз, когда нажимается кнопка.До сих пор, когда я пишу ToFile ();как и в методе deleteStudentActionPerformed, он удаляет всех студентов из всех курсов.

Вопросы:

Можно ли вызвать этот метод в моих методах actionPerformed?

Я обновил этот пост, добавив более полный код, чтобы все могли видеть, что я пытаюсь выполнить.

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                   

}

Это мой первый пост здесь.Разве не правильно ставить два вопроса?Спасибо!

1 Ответ

0 голосов
/ 04 июня 2018

Если вы хотите вызвать writeToFile внутри метода actionPerformed, это зависит от структуры, которую вы используете.Находятся ли эти методы в одном и том же классе?

Если да:

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
  }

}

Если нет, вам нужно будет импортировать класс, содержащий writeToFile, создать экземпляр объекта этого класса и вызвать writeToFileдля этого объекта:

public class Thing1 {

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

}

* и:

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
  }

}

Обратите внимание, что если классы находятся в двух разных пакетах, импорт становится следующим:

import packageNameHere.Thing1;

Такжеобратите внимание на различные модификаторы видимости.Если методы принадлежат одному и тому же классу, оба могут быть приватными и при этом вызывать друг друга.Если они находятся в разных классах, метод, вызываемый вне его собственного класса, не может быть закрытым, поэтому сделайте его общедоступным, чтобы пока все было просто.

Не уверен, что вы пытаетесь сделать, но этопростой ответ.Вам может понадобиться использовать многопоточность и бесконечные циклы, в зависимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...