2013-11-28 5 views
1

У меня есть проблема с отображением данных списка массива <> объект JTableне может Получать данные модели в JTable

public class SearchPatient extends JInternalFrame implements KeyListener 
{ 
    patientDetailBean pdb=new patientDetailBean(); 
    ArrayList<patientDetailBean> ap=new ArrayList<patientDetailBean>(); 
    String[] columnNames = {"Ptn No", 
      "Name", 
      "Gender", 
      "City", 
      "ContactNo", 
      "Birth-Date", 
      "MaritalStatus", 
      "Occupation", 
      "BloodGroup", 
      "TimeOfRegistration" 
      }; 
    DefaultTableModel dm; 
    DefaultTableModel model; 

    public SearchPatient() 
    { 
     //other initilization and displaying 

     ap=pdb.getAllPatientDetail(); 
     setTableData(ap); 

     //other initilization, displaying and KeyListener and all working properly 
    } 
    private void setTableData(ArrayList<patientDetailBean> arrayp) 
    { 
     int lenap=arrayp.size(); 
     Object[][] data=new Object[lenap][10];  // creating dynamically array of object 

     dm = (DefaultTableModel)table.getModel(); //creating model from table 

     //removing all row from existing data in table 
     while(table.getRowCount()>0) 
     { 
      ((DefaultTableModel) table.getModel()).removeRow(0); 
     } 

     //getting data from arrayp ArrayList<patientDetailBean> and save it to array of object(data) 
     int in=0; 
     for(Object obj:arrayp) 
     { 
      patientDetailBean pdb1=new patientDetailBean(); 
      pdb1=(patientDetailBean) obj; 
      data[in][0]=pdb1.getPatientid(); 
      data[in][1]=pdb1.getFirstname()+" "+pdb1.getMiddlename()+" "+pdb1.getSurname(); 
      data[in][2]=pdb1.getGender(); 
      data[in][3]=pdb1.getCity(); 
      data[in][4]=pdb1.getContactno(); 
      data[in][5]=pdb1.getBirthdate(); 
      data[in][6]=pdb1.getMaritalstatus(); 
      data[in][7]=pdb1.getOccupation(); 
      data[in][8]=pdb1.getBloodgroup(); 
      data[in][9]=pdb1.getDatetimeofcase(); 
      in++; 
     } 

     //creating model from array of object(data) 
     model = new DefaultTableModel(data, columnNames); 

     //save data to table 
     table = new JTable(model); 
    } 

    public void keyTyped(KeyEvent key) 
    { 
     //This is working proper 
     if(key.getSource().equals(txtpname)) 
     { 
      ap=pdb.getAllPatientDetail(); 

      patientDetailBean pdb=new patientDetailBean(); 
      ArrayList<patientDetailBean> arr=new ArrayList<patientDetailBean>(); 
      arr.clear(); 
      for(Object obj:ap) 
      { 
       pdb=(patientDetailBean) obj; 

       //getting data from object 
       String str1=(pdb.getFirstname()+" "+pdb.getMiddlename()+" "+pdb.getSurname()).toLowerCase(); 

       //getting data which user entered(user want to search) 
       String str2=(txtpname.getText()+key.getKeyChar()).toLowerCase(); 

       if(str1.contains(str2)) // checking for data equal and contain which user typed in JTextField(txtpname) with str1 
       { 

        arr.add(pdb); //save data to ArrayList<patientDetailBean> 
       } 
      } 

      //set recived ArrayList<> object to 
      setTableData(arr); 
     } 
    } 

} 

1) Первый раз, когда я запускаю этот код, чем данные, полученные в JTable является правильным. , когда я ввожу любую клавишу в textField, в это время данные корректно очищаются от таблицы, но не отображаются новые данные для JTable

ответ

2

удалите

table = new JTable(model); 

и установить

table.setModel(model); 
3

В принципе, вы создаете новый JTable, но вы не добавляете его ни к чему ,

Посмотрите на How to use tables для некоторых примеров.

Вы также должны рассмотреть возможность просто создать новую модель таблицы и применить ее к таблице (используя setModel) вместо того, чтобы пытаться обновить существующую модель, я думаю, вы найдете ее более быстрой и простой в использовании.

Я также предлагаю моделирование данных строк напрямую, а не добавление каждого свойства в массив и использование этого для представления строки, вы должны добавить каждый объект пациента к модели таблицы, составляющей строку. Вы должны будете использовать AbstractTableModel вместо этого, но это сделает жизнь проще, когда дело доходит до редактирования данных с помощью таблицы ... ИМХО

+0

Спасибо, дорогой MadProgrammer! –

Смежные вопросы