2015-11-17 106 views
1

我正在使用netbeans並創建一個swing應用程序。我創建了一個JComboBox和一個JTable。我可以通過單擊按鈕將值從JComboBox添加到JTable,但如果我重複相同的過程,則會再次將相同的值添加到表中。如何停止添加JComboBox的現有值。如何停止將已添加的值從JCombobox添加到JTable中

這是JComboBox中

private void populateCombo(){ 
    organizationComboBox.removeAllItems(); 
    for (Organization.Type type : Organization.Type.values()){ 
      organizationComboBox.addItem(type); 
    } 
} 

的代碼這是JTable的

private void populateTable(){ 
    DefaultTableModel model = (DefaultTableModel) organizationTable.getModel(); 
    model.setRowCount(0); 

    for (Organization organization : organizationDirectory.getOrganizationList()){ 
     Object[] row = new Object[2]; 
     row[0] = organization.getOrganizationID(); 
     row[1] = organization.getName(); 

     model.addRow(row); 
    } 
} 

的代碼,這是我的添加按鈕

Type type = (Type) organizationComboBox.getSelectedItem(); 
    Organization o = organizationDirectory.createOrganization(type); 

     if(type.equals(Type.Receptionist)){ 
      o.getSupportedRole().add(new ReceptionistRole()); 
      }else 
      if(type.equals(Type.Doctor)){ 
        o.getSupportedRole().add(new DoctorRole()); 
       }else 
       if(type.equals(Type.VaccineManager)){ 
        o.getSupportedRole().add(new VaccineManagerRole()); 
       }else 
        if(type.equals(Type.LabAssistant)){ 
        o.getSupportedRole().add(new LabAssistantRole()); 
       }else 
        if(type.equals(Type.Donor)){ 
        o.getSupportedRole().add(new DonorRole()); 
       }else 
        if(type.equals(Type.Patient)){ 
        o.getSupportedRole().add(new PatientRole()); 
       } 

    populateTable(); 

提前感謝代碼。

回答

2

請勿使用DefaultTableModel。該課程僅適用於簡單案例和演示應用程序。只需看看here就可以看到你自己的模型。

所以,你的模型將是這樣的:

public class OrganizationModel extends AbstractTableModel { 
    protected String[] columnNames; 
    protected List<Organization> dataVector; 

    public OrganizationModel(String[] columnNames) { 
     this.columnNames = columnNames; 
     dataVector = new ArrayList<Organization>(); 
    } 

    public String getColumnName(int column) { 
     return columnNames[column]; 
    } 

    public boolean isCellEditable(int row, int column) { 
     return false; 
    } 

    public Class getColumnClass(int column) { 
     return String.class; 
    } 

    public Object getValueAt(int row, int column) { 
     return column == 0? dataVector.get(row).getOrganizationID() : dataVector.get(row).getName(); 
    } 

    public void addRowWhenNotExist(Organization o) { 
     if (!dataVector.contains(o)) { 
      dataVector.add(o); 
      fireTableRowsInserted(dataVector.size() - 1, dataVector.size() - 1); 
     } 
    } 
} 

在這個例子中的正確的工作,還需要方法的正確定義equals和hashCode爲你的類組織。

public class Organization { 

    // your stuff 

    public boolean equals(Object another) { 
     if (another instanceof Organization) { 
      return getOrganizationID() == ((Organization) another).getOrganizationID(); 
     } else { 
      return false; 
     } 
    } 

    public int hashCode() { 
     return getOrganizationID(); 
    } 
} 
+0

這是我的組織類.. –

+0

公共抽象類組織{ 私人字符串名稱; private int organizationID; 公共枚舉類型{ 管理員( 「管理機構」),接待員( 「接待員組織」), 博士( 「醫生組織」),VaccineManager( 「疫苗經理組織」), LabAssistant( 「LabAssistant組織」),捐贈者(「捐贈組織」),患者(「患者組織」); 私有字符串值; 私人類型(字符串值){this.value =值的{ ;值; } public String getValue(){ return value; } } –

+0

@UdayVerma我糾正了我的例子 –