java - 添加 actionPerformed 后组合框中的项目减少
问题描述
我想在单击组合框中的不同项目后立即更新我的表格。添加 actionPerformed 组合框后仅显示第一项,箭头不起作用。选择不同的项目并单击按钮后,我正在更新我的表格。在按钮中执行的操作确实有效。我是否错误地使用了 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);
推荐阅读
- python - 为什么当变量变为0时while循环不会停止?(Python)
- java - 用于唯一查询的 Spring/MongoDB 多计数
- sql - 需要 SQL 从子查询生成多行
- angular - NativeScript w/ Angular 9 - ../node_modules/nativescript-ui-sidedrawer/__ivy_ngcc__/angular/side-drawer-directives.js 中的错误
- linux-kernel - 嵌入式 linux 内核分发
- python - keras 变分损失函数量表
- c# - MVVM 多个文本框一个命令
- vue.js - vue v-on:点击问题,动作不起作用
- php - 使用用户输入检查数组以确保非数字受限制 php
- sql - 带有重复键的 SQL 查询