1

私はプログラミングが初めてで、netbeans 8.1 を使用してプログラムをコーディングしました。私のプログラムは、jTable で検索されるすべての関連項目を表示するためのものです。そして、別の jTable で特定の項目を選択できます。rs2xml を使用して jTable のメソッドを作成しましたが、正常に動作します。しかし、使用した後、検索がうまくいきませんでした。検索に正しいアイテムが表示されません。ライブラリ検索から rs2xml.jar を削除すると正しく機能しますが、項目を選択すると jTable に表示されません。私はこれを理解することはできません。

検索項目のコードは次のとおりです。

     private void txtSearchKeyReleased(java.awt.event.KeyEvent evt) {                                      

    try {

        @SuppressWarnings("LocalVariableHidesMemberVariable")
        ResultSet rs = oilmart.getConnection().createStatement().executeQuery("SELECT * FROM stock WHERE Item_Name LIKE '%" + txtSearch.getText() + "%'");
        if (rs.next()) {

            billinfo();
            txtPlace.setText(rs.getString("Place"));
        } else {

            JOptionPane.showMessageDialog(this, "Result not found", null, JOptionPane.ERROR_MESSAGE, null);

        }

    } catch (SQLException | HeadlessException e) {
    }

    // TODO add your handling code here:
}    

これは、rs2xml.jar を使用して作成したテーブル メソッドです。

    public void billinfo() {

    DefaultTableModel dtm = (DefaultTableModel) tblBillinfo.getModel();
    dtm.setRowCount(0);

    try {
        @SuppressWarnings("LocalVariableHidesMemberVariable")
        ResultSet rs = oilmart.getConnection().createStatement().executeQuery("SELECT * FROM stock WHERE Item_Name LIKE '%" + txtSearch.getText() + "%'");

        while (rs.next()) {

            Vector v = new Vector();
            v.add(rs.getString("Item_No"));
            v.add(rs.getString("Item_Name"));
            v.add(rs.getString("Qty"));
            v.add(rs.getString("Price_per_Qty"));
            v.add(rs.getString("Place"));

            buy_price = Integer.parseInt(rs.getString("Price_per_Qty"));

            dtm.addRow(v);
            tblBillinfo.setModel(DbUtils.resultSetToTableModel(rs));
        }

    } catch (Exception e) {
    }

}

そして、これは特定のアイテムを選択するためのものです:

     private void tblBillinfoMouseClicked(java.awt.event.MouseEvent evt) {                                         
    x++;

    int r = tblBillinfo.getSelectedRow();

    String no = tblBillinfo.getValueAt(r, 0).toString();
    String name = tblBillinfo.getValueAt(r, 1).toString();
    String buy = tblBillinfo.getValueAt(r, 3).toString();

    buy_price = (int) tblBillinfo.getValueAt(r, 3);

    String plc = tblBillinfo.getValueAt(r, 4).toString();

    tblBill.setValueAt(no, x, 0);
    tblBill.setValueAt(name, x, 1);
    tblBill.setValueAt(buy, x, 2);
    txtPlace.setText(plc);


}                                        

これを理解するのを手伝ってください。ありがとう。

4

1 に答える 1

1

データの各行を TableModel に追加するコード (正しいようです) があります。

dtm.addRow(v);

しかし、次のステートメントは、最初の行を ResultSet の残りのデータ行に置き換えます。

tblBillinfo.setModel(DbUtils.resultSetToTableModel(rs));

その結果、TableModel の最初の行のデータが失われます。

上の発言だけはやめてください。

于 2016-10-01T13:16:36.280 に答える