如何将对象数组传递给按钮?

时间:2013-04-25 18:14:22

标签: java arrays swing jtable abstracttablemodel

我有两个类:一个叫Student,另一个叫Course。我想对一个简单的注册系统进行模拟。

我的Student班级部分有以下形式:

class Student
{
    private String id,
    private Course[] listOfCourses;
    private int numCourse;
    //accesing methods
    public registration(Course course){
          listOfCourses[numCourse]=course;
          numCourse++;
    }
    public Course[] getCourse(){
          return listOfCourses;
    }
}

并且Course类具有以下形式:

class Course
{
     String id, String courseName;
     //constructor
     //accesing methods
}

我希望通过在Java Swing中制作的形式按下按钮,将一个特定学生注册的课程内容显示为jTable。我尝试了以下内容,但根本没有结果:

Student e=new Student();
Course d[]=new Course[4];   
d=e.getCourses();    //to receive the array of Courses from the Student class
for (int i=0;i<d.length;i++){
      jTable2.setValueAt(estLista[i].getName(), i, 0);
}

我怎么能这样做?我的意思是有一种方法可以将存储在Course类中的数组内容放入按钮的ActionEvent中?

2 个答案:

答案 0 :(得分:1)

从您提供的代码中我相信至少有一个原因导致您没有获得课程..因为它没有在注册过程中设置:)(除非您有注册类,否则语法不正确?)可能不是一个完整的解决方案,但它纠正了一个问题

public void registration(Course course){
     // listOfCourses[numCourse];
        listOfCourses[numCourse]=course;
      numCourse++;
}

答案 1 :(得分:0)

好吧,对我来说还不太清楚,但我会提供一些代码并告诉我它是否对你有帮助。

注意:未经过测试

对于学生(抱歉,我更喜欢使用列表而不是数组):

public class Student {

    private String id;
    private List<Course> takenCourses;

    public void registration(Course course){
        if (this.takenCourses != null) {
            takenCourses.add(course);
        } else {
            System.err.println("an array has not been specified.");
        }
    }

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }

    public List<Course> getTakenCourses() {
        return takenCourses;
    }
    public void setTakenCourses(List<Course> takenCourses) {
        this.takenCourses = takenCourses;
    }

当然:

public class Course {
    private String id;
    private String name;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

对于你的UI,我刚创建了一个UI的“模拟”,我假设你已经实现了更完整的东西...我假设你已经将组件作为框架或面板的全局变量初始化,或者至少你有方法得到他们。

public class UIHelper extends JFrame {

    Student student = new Student();
    JButton btnAction;
    JTable myTable;
    public UIHelper() {
        //Methods for creating UI 
        //.
        //.
        //.
        student.setId("stackoverflowed");
        student.setTakenCourses(new ArrayList<Course>());

        btnAction = new JButton("Action!");
        //Methods of the JButton (...)
        btnAction.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                //Now just process since student is a global variable (you can set it static as well) but it shouldn't be a good practice at all
                for (Course course : student.getTakenCourses()) {
                    System.out.println(course.getName());
                             //Add the element to your table.
                }
            }
        });
    }

    public static void main(String[] args) {
        //Assume this is your UI
        new UIHelper();
    }

希望我给你一个想法,最好的问候。