Как я могу добавить идентификатор базы данных в качестве индекса со списком в java?

Я хочу добавить индекс со списком из идентификатора базы данных.

 public static void selectCompany(javax.swing.JComboBox cmbCategory ){
    cmbCategory.removeAllItems();
    String sql="SELECT * FROM company_details";
    try{
        Connection conn=dbConnection();
        PreparedStatement pstmt=conn.prepareStatement(sql);
        ResultSet rs=pstmt.executeQuery(sql);
        while(rs.next()){
            int id=rs.getInt("company_id");
            String category=rs.getString("company_name");
            cmbCategory.addItem(id);
            cmbCategory.addItem(category);
        }
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e);
    }
}

cmbCategory — это объект со списком. Я хочу отобразить идентификатор как индекс со списком и список со списком, отображаемый как имя категории. База данных — mysql.


person Community    schedule 26.12.2011    source источник


Ответы (3)


Вы можете добавлять объекты в ComboBox, а не только строки, поэтому что-то вроде этого должно помочь:

    while(rs.next()){
        int id=rs.getInt("company_id");
        String category=rs.getString("company_name");
        Object[] itemData = new Object[] {id, category};
        cmbCategory.addItem(itemData);
    }

И, как указал Гарри Джой, вы можете указать, как следует отображать этот элемент, используя ListCellRenderer:

class MyListRenderer extends JLabel implements ListCellRenderer {

    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        Object[] itemData = (Object[])value;
        setText((String)itemData[1]);

        return this;
    }
}

Который вы можете позже назначить JComboBox:

cmbCategory.setRenderer(new MyListRenderer());

Делая это, вы получаете очевидное преимущество, заключающееся в том, что идентификатор и название категории находятся только в одном объекте, поэтому, когда пользователь выбирает элемент в поле со списком, вы можете получить доступ ко всем свойствам этого объекта (идентификатор и имя!).

person Diego Agulló    schedule 26.12.2011

Если вы хотите установить company_id как индекс элемента combobox, то мой ответ: вы не можете установить индекс элемента. Если вы хотите отобразить и идентификатор, и категорию, объедините идентификатор и название компании.

cmbCategory.addItem(id + " " + category);
person kv-prajapati    schedule 26.12.2011
comment
Я хочу удалить выбранный элемент, как я могу это сделать, при этом мне требуется идентификатор элемента - person ; 26.12.2011

При использовании пользовательского средства визуализации вы теряете возможность доступа к элементам поля со списком, используя клавиатуру для ввода первого символа элемента. Это связано с тем, что при поиске модели со списком используется метод toString() для каждого элемента, чтобы сначала запрошенный элемент. В этом случае реализация массива toString() не имеет смысла.

Другое решение — создать собственный объект и переопределить метод toString() объекта, как показано в этом примере: Как использовать элемент Map в качестве текста JComboBox

person camickr    schedule 26.12.2011