Я хочу вызвать название курса в поле со списком и распечатать идентификатор курса, для которого выбрано название курса. Как я могу решить эту проблему?

    public void coursename(){
     Session session = HibernateUtil.getSessionFactory().getCurrentSession();
     session.beginTransaction();
     Query query= session.createQuery("select a.courseName,a.courseId  from Semester e inner join e.course as a"); 
   for (Iterator it = query.iterate(); it.hasNext();) {
      Object  row[] = (Object[])   it.next();
      combocourse.addItem(row[0]);
        }        
       session.close();
   }


    private void combocourseActionPerformed(java.awt.event.ActionEvent evt) {                                            


  JComboBox combocourse = (JComboBox)evt.getSource();  
   Object row[] = (Object[])combocourse.getSelectedItem();  
    System.out.println("id"+row[1] ); 

       }
5
user3627624 14 Май 2014 в 14:15

3 ответа

Лучший ответ

Не пытаясь преобразовать String в Object[]. Посмотрите на возвращаемое значение используемых вами методов и используйте соответствующие типизированные переменные для хранения этих возвращаемых значений. JComboBox#getSelectedItem возвращает Object (в данном случае очевидно String), а не массив (любого вида). Но в этой строке:

Object row[] = (Object[])combocourse.getSelectedItem();

... вы пытаетесь преобразовать его в Object[] (массив из Object), чтобы вы могли сохранить его в Object[]. Вы не можете этого сделать.

Похоже, что row должно быть просто Object или String, а не Object[], и что когда вы его используете, вы должны просто использовать его напрямую, а не как row[1] :

Object row = combocourse.getSelectedItem();  
System.out.println("id"+row ); 

Или же

String row = (String)combocourse.getSelectedItem();  
System.out.println("id"+row ); 

В комментарии вы спросили:

Я назвал курс в поле со списком, но мне нужно сохранить идентификатор курса в своей базе данных. Как я могу получить courseId?

Я не знаю JComboBox. По сути, вам нужно сохранить что-то, что содержит оба значения (идентификатор и имя), а затем использовать это что-то, когда вы получите выбранный элемент. Если JComboBox не имеет встроенных функций, вам может понадобиться простой класс для этого, который хранит значения и реализует toString, возвращая courseName. Что-то отдаленно вроде:

class CourseItem {
    private String courseName;
    private String courseId; // Or int or whatever

    CourseItem(String courseName,String courseId) {
        this.courseName = courseName;
        this.courseId = courseId;
    }

    public String getCourseName() {
        return this.courseName;
    }

    public String getCourseId() {
        return this.courseId;
    }

    public String toString() { // For display
        return this.courseName;
    }
}

Затем:

public void coursename() {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    Query query = session.createQuery("select a.courseName,a.courseId  from Semester e inner join e.course as a");
    for (Iterator it = query.iterate(); it.hasNext();) {
        Object row[] = (Object[]) it.next();
        combocourse.addItem(new CourseItem((String)row[0], (String)row[1]));
    }
    session.close();
}

private void combocourseActionPerformed(java.awt.event.ActionEvent evt) {


    JComboBox combocourse = (JComboBox) evt.getSource();
    CourseItem item = (CourseItem)combocourse.getSelectedItem();
    System.out.println("id" + item.getCourseId());

}
4
Paolo Forgia 19 Фев 2018 в 15:44

Пытаться:

Object row = (Object)combocourse.getSelectedItem();  
System.out.println("id"+row ); 

Вы добавляете в комбокурс только отдельные объекты, а не массивы объектов.

1
Tim B 14 Май 2014 в 10:18

combocourse.getSelectedItem(); в вашем случае возвращает String, и строка не может быть преобразована в массив объектов. Если вы хотите получить список объектов, они используют getSelectedObjects()

1
user902383 14 Май 2014 в 10:32