我想在点击组合框中的不同项目后立即更新我的表。添加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();
}
工作正常,但我想在单击组合框中的新项目后立即更新表。
编辑:我通过在fillTable((之后添加fillComboBox((来修复它。但现在,即使在removeAll((之后,我在组合框中也有了两个第一项。我该如何修复它?
public Welcome() {
initComponents();
conn = MySqlConnect.ConnectDB();
fillComboBox();
fillTable();
ComboBox.removeAll();
fillComboBox();
repaint();
}
我总是通过使用底层模型动态更改组合框的内容,而不是通过实际的组合框。在GUI已经显示之后,我认为这很重要。。。使用模型,而不是JComboBox本身。
...
final var model = new DefaultComboBoxModel<String>();
while (rs.next()) {
model.addElement(rs.getString("TABLE_NAME"));
}
...
ComboBox.setModel(model);