Синхронизируйте jCombobox с таблицей MySQL - PullRequest
2 голосов
/ 25 ноября 2011

Я создал приложение базы данных с помощью GUI-Designer NetBeans.

Графический интерфейс с Comboboxes (привязан к MySQL, пользователю и команде баз данных): Combobox1 & 2 to select a user and/or a team

on Button new -> jDialog - выполняет запрос для сохранения нового пользователя в базе данных: jDialog with textfield, save and cancel

Проблема: Combobox обновляется при запуске программы, но не при запуске программы.

Вопрос. Можно ли обновить записи в моем комбинированном ящике непосредственно при сохранении нового пользователя или команды? И как я мог это реализовать?

Редактировать: Вот что я делаю, нажимая на saveButton в JDialog:

int k=st.executeUpdate(
    "INSERT INTO User (username) " + " VALUES ('"+ name + "')");
//Here I'd like to update the jComboBox1 directly if possible
Outerclass.jComboBox1...; 
JOptionPane.showMessageDialog(null, "User is successfully saved");' 

Ответы [ 2 ]

4 голосов
/ 25 ноября 2011

Просто обновите ComboBoxModel вашего компонента при вставке нового пользователя в базу данных.Если это бесполезно, предоставьте sscce , в котором обнаружена проблема.

Приложение: приведена ссылка на JComboBox,

private final JComboBox combo = new JComboBox();

, которую вы можете обновитьего модель, как показано ниже.Этот пример добавляет name в начало списка, но SortedComboBoxModel является привлекательной альтернативой.

DefaultComboBoxModel model = (DefaultComboBoxModel) combo.getModel();
model.insertElementAt(name, 0);

Добавление: проще говоря, используйте метод, доступный для combo сама,

combo.insertElementAt(name, 0);
1 голос
/ 27 ноября 2011

Я столкнулся с подобной проблемой: если вы введете что-либо в базу данных, что должно быть отражено в JComboBox, вы не сможете изменить значения этого поля со списком.Было бы здорово, если бы вы могли добавлять вещи в JComboBox «на лету» напрямую, но вы должны получить эти данные, создать из них новую ComboBoxModel, а затем настроить JComboBox на эту новую модель.

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

Мой код:

Vector<String> s = new Vector<String>();
try {
    // I'm using prepared statements, get the ResultSet however you like
    ResultSet rs = myPreparedStatement.executeQuery(); 
    while ( rs.next() ) {
        // Change "1" to whatever column holds your data
        s.add(rs.getString(1)); 
    }
} catch (SQLException ex) {
    ex.printStackTrace(); // or whatever
}
DefaultComboBoxModel jcbModel = new DefaultComboBoxModel(s);
jcb.setModel(jcbModel);

РЕДАКТИРОВАТЬ: Помните, что столбцы ResultSet имеют значение 1-индексируется, а не 0 индексируется!Получает меня каждый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...