2016-11-28 5 views
0

я пытаюсь переопределить мой метод JComboBox getSelectedItem, используя статический метод:наиважнейшая JComboBox getSelectedItem не работает

public static void setupID_TITLE_ComboBox(JComboBox jComboBox, String tableName) throws SQLException { 
    // query to select ID and TITLE from profiles table 
    String query = "SELECT ID,TITRE FROM " + tableName + ";"; 
    ResultSet myJComboResultSet = SQLTools.ExecuteQuery(query); 

    ArrayList visualItems = new ArrayList(); // the Items of my combobox [item1,item2] 
    ArrayList idItems = new ArrayList(); // the corresponding IDs for each item [id1,id2] 

    while (myJComboResultSet.next()) { 
     visualItems.add(myJComboResultSet.getObject("TITRE")); // filling items set 
     idItems.add(myJComboResultSet.getObject("ID")); // filling IDs set 
    } 

    System.out.println("IDItems=" + idItems); // checking that my Items are filled 
    System.out.println("visualItems=" + visualItems); // checking that my IDs are filled 

// creating a combobox of previous items 
    jComboBox = new JComboBox(visualItems.toArray()) { 
     ArrayList values = idItems; 

// overriding the getSelectedItem to return the corresponding selected item's ID 
     @Override 
     public Object getSelectedItem() { 
      Object get = values.get(super.getSelectedIndex()); 
      System.out.println("get = " + get); 
      return get; 
     } 

    }; 

} 

Я звоню этот метод из другого кадра:

JComboBoxTools.setupID_TITLE_ComboBox(J_Users_Profile,"profiles"); 

Но при выполнении его не работают. выхода:

visualItems = [Администратор, Учитель, студент]

IDItems = [0,3,5]

выбранной деталь возвращение значение: Учитель

Не знаю, что делать, я хочу, чтобы он вернул 3, который является идентификатором учителя.

полный проект находится на стадии: this link

спасибо.

+0

Так что же вы на самом деле пытаетесь достичь здесь? Вы просто хотите напечатать выбранное значение? – Thibstars

+0

мои объекты combobox: [SuperAdmin, Student, Teacher], когда элемент выбран, значения возврата, например, (Student) в моей базе данных. У профиля Student есть id, я хочу обработать в backend, используя id, а не название профиль, который является (Student), почему у меня есть 2 arraylist для визуального (frontend) для обработки (я буду генерировать запрос вставки в бэкэнд) –

+0

мой запрос хорошо сформирован и сгенерирован, но я хочу, чтобы идентификатор не был заголовком профиля –

ответ

0

Я получаю мои желаемые значения, используя mapComboBoxModel

public static void setupID_TITLE_ComboBox(JComboBox jComboBox, String tableName) throws SQLException { 

    String query = "SELECT ID,TITRE FROM " + tableName + ";"; 
    ResultSet myJComboResultSet = SQLTools.ExecuteQuery(query); 

    HashMap myMap = new HashMap(); 
    while (myJComboResultSet.next()) { 
     myMap.put(myJComboResultSet.getObject("TITRE"), myJComboResultSet.getObject("ID")); 
    } 

    jComboBox.setModel(new MapComboBoxModel(myMap) { 

     @Override 
     public Object getValue(Object selectedItem) { 
      return map_data.get(selectedItem); //To change body of generated methods, choose Tools | Templates. 
     } 

    }); 


} 

Я перекрытая ПолучитьЗначение вернуть идентификатор.

if (myComponent instanceof JComboBox) { 
      JComboBox jComboBox = (JComboBox) myComponent; 
      MapComboBoxModel model = (MapComboBoxModel) jComboBox.getModel(); 
      values+=""+model.getValue(model.getSelectedItem())+",";     
     } 
Смежные вопросы