2016-12-20 2 views
0

年齢、名前などの属性を持つユーザーを追加できるJTableがあります。これが機能し、ユーザーはarraylistとJTableに追加されます。 私が望むのは、ユーザーのarrayListに格納されたオブジェクトを取得して変更または削除できるようにするために、JTable行を選択するときです。私は、JTableのにユーザーを追加するときにここでJTableからストアドオブジェクトを取得する方法

は、私のコードの例です:

private void jButtonAddAUserActionPerformed(java.awt.event.ActionEvent evt) {             
    User obj=new User(); 
    obj.setName(jTextFieldName.getText()); 
    obj.setAdress(jTextFieldAdress.getText()); 
    obj.setNumCC(Integer.parseInt(jTextFieldNumCC.getText())); 
    obj.setTele(Integer.parseInt(jTextFieldTele.getText())); 
    obj.setUserName(jTextFieldUserName.getText()); 
    obj.setPassword(jTextFieldPassword.getText()); 

    DefaultTableModel model=(DefaultTableModel) jTableUsers.getModel(); 
    model.addRow(new Object[]{ 
     jTextFieldName.getText(), 
     jTextFieldAdress.getText(), 
     jTextFieldTele.getText(), 
     jTextFieldNumCC.getText(), 
     obj.isAdmin 
    }); 

    usersList.add(obj); 
    JOptionPane.showMessageDialog(null,"Data inserted correctly."); 
    jTextFieldName.setText(""); 
    jTextFieldAdress.setText(""); 
    jTextFieldNumCC.setText(""); 
    jTextFieldTele.setText(""); 
    jTextFieldPassword.setText(""); 
    jTextFieldUserName.setText(""); 
} 

編集:ここでは が既にユーザーを取り除く作業するためのコードです:

ます。private void jButtonRemoverActionPerformed(java.awtで.event.ActionEvent evt){

ここで、まだ更新されていないユーザーを更新するためのコードですjTextFields:

private void jButtonUpdateActionPerformed(java.awt.event.ActionEvent evt) {             

    DefaultTableModel model = (DefaultTableModel) jTableUsers.getModel(); 
    userList.get(jTableUsers.getSelectedRow()); 
    model.setValueAt(jTextFieldName.getText(), jTableUsers.getSelectedRow(),0); 
    model.setValueAt(jTextFieldAdress.getText(), jTableUsers.getSelectedRow(),1); 
    model.setValueAt(jTextFieldPhone.getText(), jTableUsers.getSelectedRow(),2); 
    model.setValueAt(jTextFieldNumCC.getText(), jTableUsers.getSelectedRow(),3); 
    User u =userList.get(jTableUsers.getSelectedRow()); 

    JOptionPane.showMessageDialog(null,"Data updated."); 

} 

誰でも私にこれについての助けを与えてもらえますか?ありがとう!

+0

'userList.get(table.getSelectedRow());'指定されたインデックスにユーザオブジェクトが返されます。これで、ユーザーオブジェクトを変更し、リスト内のユーザーを置き換えることができます。その後、変更されたデータでテーブルを「再描画」する – XtremeBaumer

答えて

3

このようなものを使用することもできます。残念ながら、ユーザーの編集方法を指定していませんでした。

User u=userList.get(table.getSelectedRow()); //get user for editing 
int location=table.getSelectedRow(); //get location in list to maintain order 
userList.remove(u); //remove selected user to edit variables 
//modify user u 
userList.add(location,u); //insert user at previous location in list 
model.setRowCount(0); //reset table model 
for (int i = 0; i < userList.size(); i++) { //refill table model 
    User u = userList.get(i); /7get user 
    Vector<Object> vhelp = new Vector<>(); //create vector to store the values of the variables from user 
    vhelp.add(/*your data*/); // 1 add per variable that should be displayed in table 
    model.addRow(vhelp); //add the data to the table model (fills the table with data) 
} 

あなたの方法は次のようになります。ユーザーは自分のArrayListのとのJTableに追加され

DefaultTableModel model = (DefaultTableModel) jTableUsers.getModel(); 
    User u = userList.get(jTableUsers.getSelectedRow()); 
    int location=jTableUsers.getSelectedRow(); 
    userList.remove(u); 
    u.setName(jTextFieldName.getText()); 
    u.setAdress(jTextFieldAdress.getText()); 
    u.setNumCC(Integer.parseInt(jTextFieldNumCC.getText())); 
    u.setTele(Integer.parseInt(jTextFieldTele.getText())); 
    //u.isAdmin can't tell what this has to be 
    userlist.add(location,u); 

    model.setRowCount(0); 
    for (int i = 0; i < userList.size(); i++) { 
     User u = userList.get(i); 
     Vector<Object> vhelp = new Vector<>(); 
     vhelp.add(u.getName()); 
     vhelp.add(u.getAddress()); 
     vhelp.add(u.getTele()); 
     vhelp.add(u.getNumCC()); 
     vhelp.add(u.isAdmin); 
     model.addRow(vhelp); 
    } 
    JOptionPane.showMessageDialog(null, "Data updated."); 
+0

jTableにすべてのオブジェクト(ユーザー)属性を持たせる必要がありますか?インデックスが範囲外であるため削除できません。 – Dan

+0

どのオブジェクトにエラーが表示されますか? – XtremeBaumer

+0

後にエラーが発生しました:User u = userList.get(table.getSelectedRow()); – Dan

1

データを別々の場所に保存しないでください。データはJTableTableModelにのみ保存する必要があります。

したがって、各ユーザーのデータを格納するカスタム "ユーザー"オブジェクトを作成できます。次に、ユーザTableModelを作成して、JTableで表示およびアクセスできる「ユーザ」オブジェクトを保持することができます。

私が欲しいのは、ユーザーのarrayListに格納されたオブジェクトを取得して変更または削除できるようにするためです。

カスタムTableModelを作成するためのステップバイステップアプローチについては、Table Row Modelを参照してください。これには、TableModelのオブジェクトを動的に追加、アクセス、削除するために必要なすべてのメソッドが含まれています。

+0

私はこれについて考えて、すべてのデータを持つクラス、シリアル化されているので、後でファイルやオブジェクトに保存することができます...しかし、私はそれが私が得ることができるようにしようとします... – Dan

関連する問題