我正在尝试将数据库(称为stock_info)中的列(称为部分)的值读入JComboBox
中的JTable
(称为tblContents
})。我的代码如下。运行该文件时,组合框出现在表中,当单击它们以选择一个选项时,它们会扩展为8个空白选项,因为数据库表中的列中有8个值。
有人可以解释为什么这些选项都是空白的吗?
import java.sql.*;
import javax.swing.*;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;
public class Sale extends javax.swing.JFrame {
PreparedStatement pst = null;
Connection conn = null;
ResultSet rs = null;
int count = 0;
public void FillCmbs() {
String sql = "SELECT * from stockinfo ORDER BY parts";
int size = 0;
try {
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
while(rs.next()){
size++;
}
String[] items = new String[size];
while (rs.next()) {
items[count] = rs.getString("parts");
count++;
}
JComboBox jcb = new JComboBox(items);
TableColumn tc = tblContents.getColumnModel().getColumn(1);
TableCellEditor tce = new DefaultCellEditor(jcb);
tc.setCellEditor(tce);
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e);
}
}
public Sale() {
initComponents();
conn = DBConnect.ConnectDB();
}
private void formWindowActivated(java.awt.event.WindowEvent evt) {
FillCmbs();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Sale().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable tblContents;
// End of variables declaration
}
答案 0 :(得分:3)
在第一个while
循环导航ResultSet
rs
之后,永远不会输入后续while
循环,因为没有更多可用记录,rs.next()
返回false
while (rs.next()) {
items[count] = rs.getString("parts");
...
}
使用String
构建一个字符串集合,而不是使用单独的循环确定items
数组Vector<String>
的大小。然后,可以在 JComboBox
的单个导航后直接将其传递到ResultSet
构造函数。
Vector<String> data = new Vector<>();
while (rs.next()) {
data.add(rs.getString("parts"));
}
count = data.size();
JComboBox<String> jcb = new JComboBox<>(data);
作为奖励,count
变量等同于data.size()
答案 1 :(得分:0)
不需要数组或ArrayList。只需在开始循环之前创建组合框。然后使用:
comboBox.addItem( rs.getString("parts") );