当前位置: 首页 > 知识库问答 >
问题:

使用ActionListener从列表中添加和删除项

公良飞尘
2023-03-14

一个课程只有一个主题(CoursetType)和一个数字(courseNumType)。

我已经在下面粘贴了两个类的完整代码,但我认为问题是我的action listener创建了一个新对象,然后调用了一个dropClass()方法(实际上是一个list.remove())。但我不确定如何在不创建新对象的情况下传递正确的值。

JButton dropButton = new JButton("Drop Course");
            dropButton.setBounds(120, 210, 160, 20);
            dropButton.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    
                
                Student studentobj = new Student(fNametxt.getText(), lNametxt.getText(),stuEmailtxt.getText(), dobtxt.getText(), stuList);
                Course courseobj = new Course (courseTypeBox.getSelectedItem().toString(), (int)courseNumTypeBox.getSelectedItem());
                
                studentobj.dropCourse(courseobj);
                }
                
                
            });

这是我创建GUI和实现动作侦听器的主要方法和类:

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class SIS_GUI {

  public SIS_GUI() {
    createStudentGUI();
  }


    private void createStudentGUI() {
        // TODO Auto-generated method stub
        List<Course> stuList = new ArrayList<>();

        JFrame jframe = new JFrame("Tom's Wonderful Student Information System");
        jframe.setLayout(new GridLayout(8, 4));
        JLabel fName = new JLabel("Enter Student First Name");
        fName.setBounds(10, 50, 150, 20);
        JTextField fNametxt = new JTextField(" ");
        fNametxt.setBounds(150, 50, 150, 20);
        JLabel lName = new JLabel("Enter Student Last Name");
        lName.setBounds(10, 150, 150, 20);
        JTextField lNametxt = new JTextField(" ");
        lNametxt.setBounds(350, 150, 150, 20);
        JLabel stuEmail = new JLabel("Enter Student Email");
        stuEmail.setBounds(10, 90, 150, 20);
        JTextField stuEmailtxt = new JTextField(" ");
        stuEmailtxt.setBounds(200, 90, 150, 20);
        JLabel dob = new JLabel("Enter Date of Birth");
        dob.setBounds(10, 130, 150, 20);
        JTextField dobtxt = new JTextField(" ");
        dobtxt.setBounds(200, 130, 150, 20);
        JLabel course = new JLabel("Select Course Name");
        course.setBounds(10, 170, 150, 20);
        String[] courseType = { "Biology", "Computer Science", "Philosophy" };
        JComboBox courseTypeBox = new JComboBox(courseType);
        //courseTypeBox.setBounds(200, 170, 150, 20);
        JLabel courseNum = new JLabel("Select Course Number");
        course.setBounds(10, 170, 150, 20);
        Integer[] courseNumType = { 101, 202, 303 };
        JComboBox courseNumTypeBox = new JComboBox(courseNumType);
        //courseNumTypeBox.setBounds(200, 170, 150, 20);
        JButton addButton = new JButton("Add Course");
        addButton.setBounds(120, 210, 160, 20);
        addButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                
                //String selectedCourseName = courseTypeBox.getSelectedItem().toString();
                //int selectedCourseNum = (int) courseNumTypeBox.getSelectedItem();
                
                Student studentobj = new Student(fNametxt.getText(), lNametxt.getText(),stuEmailtxt.getText(), dobtxt.getText(), stuList);
                Course courseobj = new Course(courseTypeBox.getSelectedItem().toString(), (int)courseNumTypeBox.getSelectedItem());
                
                studentobj.addCourse(courseobj);
                
            }
        });
            JButton dropButton = new JButton("Drop Course");
            dropButton.setBounds(120, 210, 160, 20);
            dropButton.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    
                //String selectedCourseName = courseTypeBox.getSelectedItem().toString();
                //int selectedCourseNum = (int)courseNumTypeBox.getSelectedItem();
                
                Student studentobj = new Student(fNametxt.getText(), lNametxt.getText(),stuEmailtxt.getText(), dobtxt.getText(), stuList);
                Course courseobj = new Course (courseTypeBox.getSelectedItem().toString(), (int)courseNumTypeBox.getSelectedItem());
                
                studentobj.dropCourse(courseobj);
                }
                
                
            });
            
            JButton viewButton = new JButton("View Courses");
            viewButton.setBounds(120, 210, 160, 20);
            viewButton.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    
                    
                    Student studentobj = new Student(fNametxt.getText(), lNametxt.getText(),stuEmailtxt.getText(), dobtxt.getText(), stuList);
                    
                    System.out.println(studentobj.toString());
                    
                }
            });
        
        jframe.add(fName);
        jframe.add(fNametxt);
        jframe.add(lName);
        jframe.add(lNametxt);
        jframe.add(stuEmail);
        jframe.add(stuEmailtxt);
        jframe.add(dob);
        jframe.add(dobtxt);
        jframe.add(course);
        jframe.add(courseTypeBox);
        jframe.add(courseNum);
        jframe.add(courseNumTypeBox);
        jframe.add(addButton);
        jframe.add(dropButton);
        jframe.add(viewButton);
        jframe.setSize(1000, 800);
        jframe.setVisible(true);
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new SIS_GUI();
    }

}
import java.util.List;


public class Student {
  private String fName;
  private String lName;
  private String email;
  private String DOB;
  private List<Course> courses;

  public Student() {

  }

      public Student(String fName, String lName, String email, String dOB, List<Course> courses) 
  {
    super();
    this.fName = fName;
    this.lName = lName;
    this.email = email;
    DOB = dOB;
    this.courses = courses;
}

public void addCourse(Course course) {
     courses.add(course);
     
}

public void dropCourse(Course course) {
    
    int index = courses.indexOf(course);
    
    courses.remove(index);

}

public List<Course> viewCourses() {

    return courses;

}



public String getfName() {
    return fName;
}

public String getlName() {
    return lName;
}

public String getEmail() {
    return email;
}

public String getDOB() {
    return DOB;
}


public String toString() {

    String str;
    if(courses.size()>0) {
         str = fName + " " + lName + "\nEmail address: " + email + "\nDate of birth: " + DOB
    
            + "\n";
            
    for(int i=0; i < courses.size(); i++) {
    str +=  courses.get(i).getCourseName() + " " + courses.get(i).getCourseID() +"\n";
        
    }}
    
    else
         str = fName + " " + lName + "\nEmail address: " + email + "\nDate of birth: " + DOB
                
                + "\nis not registered for any classes";

    return str;

  }

课程类别:

public class Course {

private String courseName;
private int courseID;
//private int capacity;

public Course() {
    
}

public Course(String courseName, int courseID /*,int capacity*/) {

    this.courseName = courseName;
    this.courseID = courseID;
    //this.capacity = capacity;
}

public String getCourseName() {
    return courseName;
}

public void setCourseName(String courseName) {
    this.courseName = courseName;
}

public int getCourseID() {
    return courseID;
}

public void setCourseID(int courseID) {
    this.courseID = courseID;
}

public boolean contains(Course course) {
    // TODO Auto-generated method stub
    return false;
}

public int indexOF(Course course) {
    // TODO Auto-generated method stub
    return 0;
}



//  public int getCapacity() {
//      return capacity;
//  }
//
//  public void setCapacity(int capacity) {
//      this.capacity = capacity;
//  }



   
  
}

共有1个答案

慕容宏邈
2023-03-14

因此,在讨论实际问题之前,我认为您可以写出一个备用的JFrame类,如下所示

public class StudentGUI extends JFrame implements ActionListener {
   
   ...

    private void createStudentGUI() {
      // TODO Auto-generated method stub
      List<Course> stuList = new ArrayList<>();

      ...
      JButton dropButton = new JButton("Drop Course");
      dropButton.setBounds(120, 210, 160, 20);
      dropButton.addActionListener(this);

      ...
    }
   
    public void actionPerformed(ActionEvent action) {
        switch(action.getActionCommand()) {
            case "Drop Course":
                //do something
                break;
            default:
                System.out.println("The action is not yet defined");
        }
    }
}

说完这话...您必须确保Course类正确地实现了它自己的equals方法,否则它将比较对象的地址,当然,由于您在drop button操作中调整了一个新的Course,对象的地址将不是相同的。

所以你会有

public class Course {
   
    ...
    
    @Override
    public boolean equals(Object o) {
       if(o instance of Course) {
          //set your own conditions like return this.courseId.equals(o.getCourseId);
       }
    }
}
 类似资料:
  • 问题内容: 是否可以将 删除 按钮添加到表中的单元格? 我有一个包含5列的表格,我想添加一个第6列。我希望第六列的每一行都有一个删除按钮。 示例行: | 10002 | 部分 金属| 001 | 是的 | 这样,用户只需单击按钮即可删除所有不需要的行。 我在表中有一个标记列,它是。我创建了一个可扩展的类。 我是否需要扩展另一个类,但要创建一个按钮而不是? 编辑 编辑 问题答案: 这是示例工作版本。

  • 问题内容: 在遍历列表时,我想根据条件删除列表中的项。请参见下面的代码。 这给了我一个例外。 如何才能做到这一点? 问题答案: 您需要使用和调用上,而不是使用循环。

  • 问题内容: 我正在尝试添加/删除表行。 这是我的代码: HTML表格 JavaScript 现在,如您所见,在我的表格中,我有文本字段和按钮。我想要的是: 仅重复行的结构。我现在无法执行此操作,因为innerHTM仅接收文本。如何插入文本框或标签? 文本字段的ID也应该不同,因为稍后我将检索这些值以将其放入数据库中。 我想放置一个函数以增加POI的数量 有人可以帮我吗? 问题答案: 您可以仅克隆具

  • 我在母版页中有一个表 table border=“1”border style=“shown”width=“80%”id=“tbladdbirthdies”tr id=“tr”td asp:TextBox id=“txFirstName”runat=“server”asp:TextBox id=“txLastName”runat=“server”asp:DropDownList id=“dlDat

  • 问题内容: 我正在尝试添加和删除被单击的li元素上的类。这是一个菜单,当我单击每个li项目时,我希望它获得该课程,而所有其他li项目都将其删除。因此,一次只有一个li项目上课。这就是我走了多远(见小提琴)。我不确定如何使“ about-link”从当前类开始,但是当单击其他li项之一时将其删除吗? 问题答案: 为什么不尝试这样的事情?

  • 问题内容: 我正在尝试工作如何使用ngClick添加类。我已经上传了我的代码到plunker 这里点击。查看角度文档,我不知道应该怎么做。以下是我的代码片段。有人可以指引我正确的方向 控制者 问题答案: 您只需要将变量绑定到指令“ ng-class”,然后从控制器进行更改即可。这是如何执行此操作的示例: 这是在jsFiddle上工作的示例