-2

私はネットビーンズでjTableを使用しています。従業員ID 1を選択するとコンボボックスを選択した後、jTableにemp 1のすべてのデータが表示されます。しかし、次に従業員 ID 2 を選択すると、jTable には empid 1 の単一の値と empid 2 の他のすべての値が表示されます。私のコードは以下のとおりです。

Connect c       = new Connect();//connection to database
con             = (Connection) c.getConnection();
st              = (Statement)con.createStatement();
String ddate    = (String)text.getSelectedItem();
System.out.println("id " +ddate);
rs = st.executeQuery("select e.employee_id,e.`first_name`, i.outtime, i.outtime_date from tbl_employee e,tbl_outtime i  where e.employee_id=i.outtime_emp_id and i.`outtime_date` LIKE '%/"+month2+"/"+year1+"'and outtime_emp_id="+ddate);
while(rs.next())
{
    String dat1=rs.getString("outtime_date");
    String e1=rs.getString("employee_id");
    System.out.println(e1);
    st33=(Statement) con.createStatement();      
    rs33=st33.executeQuery("select i.intime, i.intime_date from tbl_employee e,tbl_intime
    i where e.employee_id=i.intime_emp_id and i.`intime_date`='"+dat1+"' and 
    i.intime_emp_id="+e1);
    if(rs33.next())
    {
        int emp=rs.getInt("employee_id");
        System.out.println(emp);
        String name=rs.getString("first_name");
        String dept=rs33.getString("intime");
        String desig=rs.getString("outtime");
        String join=rs33.getString("intime_date");
        jTable1.setValueAt(emp, cnt, 0);
        jTable1.setValueAt(name, cnt, 1);
        jTable1.setValueAt(dept, cnt, 2);
        jTable1.setValueAt(desig, cnt, 3);
        jTable1.setValueAt(join, cnt, 4);
        cnt=cnt+1;
    }
}

解決策を知っている人がいたら教えてください。

4

3 に答える 3

3
于 2012-09-06T05:53:42.350 に答える
1

TableModelを使用して行を追加します。

読む

http://docs.oracle.com/javase/tutorial/uiswing/components/table.html

サンプル用。

于 2012-09-06T05:56:36.880 に答える
1

他のすべての Swing コンポーネントと同様に、テーブルは、ビュー パーツ ( JTable) とモデル パーツ ( )の 2 つの部分で構成されTableModelます。モデルがイベントのスローによって変更されたことを示すと、ビューが更新されます。詳細については、テーブルのチュートリアルを参照してください。

したがって、ユースケースでは、既存のものを調整するTableModelか、新しいものを作成できます。あなたはデータベースを扱っているので、個人的には新しいものを作成することを選択します。

Swing コンポーネントは、イベント ディスパッチ スレッドでのみアクセスおよび変更する必要があり、長時間実行されるタスク (データベースへのクエリなど) はこのスレッドで発生しないことに注意してください ( Swing 同時実行チュートリアルを参照してください)。そのため、新しい を作成することをお勧めしますTableModel。データベースのクエリに使用するワーカー スレッドでこのモデルを作成し、イベント ディスパッチ スレッドで一度にモデルを置き換えることができます。クラスはこれSwingWorkerに最適です。

于 2012-09-06T08:06:33.277 に答える