1

JComboBoxデータベーステーブル(stock_infoと呼ばれる)から(と呼ばれる)にある列JTable(partsと呼ばれる)の値を読み取ろうとしています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                   
}
4

2 に答える 2

3

最初のwhileループが次のループをナビゲートした後、使用可能なレコードがなくなるためResultSet rs 、次のループに入ることはありません。whilers.next()false

while (rs.next()) {
   items[count] = rs.getString("parts");
   ...
}

別のループを使用してString配列のサイズを決定するのではなく、を使用して文字列のコレクションを構築します。これは . _itemsVector<String>JComboBoxResultSet

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()

于 2013-08-11T17:38:36.683 に答える