Как я могу добавить идентификатор базы данных как индекс combobox в Java? - PullRequest
5 голосов
/ 26 декабря 2011

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

 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.

Ответы [ 3 ]

7 голосов
/ 26 декабря 2011

Вы можете добавлять объекты в 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());

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

1 голос
/ 26 декабря 2011

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

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

1 голос
/ 26 декабря 2011

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

cmbCategory.addItem(id + " " + category);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...