Элементы в выпадающем списке уменьшены после добавления actionPerformed - PullRequest
0 голосов
/ 02 мая 2020

Я хочу обновить свою таблицу сразу после нажатия на другой элемент в выпадающем списке. После добавления actionPerformed combobox показывает только первый элемент и стрелка не работает. Я обновляю свою таблицу после выбора другого элемента и нажатия кнопки. Действие, выполняемое в кнопке, работает. Я использую actionPerformed неправильно?

Вот код, как я добавляю элементы в комбинированный список.

private void fillComboBox() {       
    try {
        DatabaseMetaData meta = (DatabaseMetaData) conn.getMetaData();
        rs = meta.getTables("db", null, null, new String[] {
          "TABLE"
        });
        while (rs.next()) {
            ComboBox.addItem(rs.getString("TABLE_NAME"));
        }            
    } catch(Exception e) {
        JOptionPane.showMessageDialog(null,e);         
    }
}

Вот как я заполняю таблицу.

private void fillTable()
{
    String selectedValue = ComboBox.getSelectedItem().toString();
    String sql = "Select * from "+selectedValue;
    Statement stmt;
    try {
        stmt = conn.createStatement(rs.TYPE_SCROLL_INSENSITIVE,rs.CONCUR_UPDATABLE);
        rs = stmt.executeQuery(sql);
        Table.setModel(DbUtils.resultSetToTableModel(rs));
    } catch (SQLException ex) {
        Logger.getLogger(Welcome.class.getName()).log(Level.SEVERE, null, ex);
    }       
}

И после нажатия кнопки я обновляю таблицу

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    fillTable();
}  

Работает нормально, но я бы хотел обновить таблицу сразу после нажатия на новый элемент в выпадающем списке.

Редактировать: я исправил это, добавив fillComboBox () после fillTable (). Но теперь у меня есть два первых элемента в выпадающем списке даже после removeAll (). Как мне это исправить?

public Welcome() {
    initComponents();
    conn = MySqlConnect.ConnectDB();
    fillComboBox();
    fillTable();
    ComboBox.removeAll();
    fillComboBox();
    repaint();
}

1 Ответ

1 голос
/ 02 мая 2020

Я всегда изменяю содержимое ComboBox динамически, используя базовую модель, а не через фактический ComboBox. После того, как ваш GUI уже показан, я думаю, что это важно ... используя модель, а не сам JComboBox.

...
final var model = new DefaultComboBoxModel<String>();
while (rs.next()) {
    model.addElement(rs.getString("TABLE_NAME"));
}
...
ComboBox.setModel(model);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...