Как передать массив объектов на кнопку?
У меня есть два класса: один называется 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 ответа
Исходя из предоставленного вами кода, я полагаю, что есть хотя бы одна причина, по которой вы не получаете курсы.. потому что это не задано в процессе регистрации:) (Кроме того, синтаксис неверен, если у вас нет класса регистрации?) полное решение, но оно исправляет одну из проблем
public void registration(Course course){
// listOfCourses[numCourse];
listOfCourses[numCourse]=course;
numCourse++;
}
Хорошо, для меня это пока не слишком понятно, но я добавлю код и скажу, поможет ли он вам.
Примечание: не тестировалось
Для студента (извините, я предпочитаю использовать списки вместо массивов):
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;
}
Для вашего пользовательского интерфейса я только что создал "симуляцию" пользовательского интерфейса, я предполагаю, что вы реализовали что-то более полное... Я предполагаю, что вы инициализировали компоненты как глобальные переменные для вашего фрейма или панели или, по крайней мере, у вас есть методы для их получения.
public class UIHelper extends JFrame {
Student student = new Student();
JButton btnAction;
JTable myTable;
public UIHelper() {
//Methods for creating UI
//.
//.
//.
student.setId("stackrued");
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();
}
Надеюсь, я дам вам идею, с наилучшими пожеланиями.