2011-04-22 38 views
0

我在列標題上寫了一個動作監聽器,允許用戶重命名所選列並添加一個新列。如何將默認表格模型與表格標題同步?

代碼重命名列 -

int column = jTable1.getSelectedColumn(); 

      if (column == -1) { 
       return; 
      } 
      boolean blag = true; 
      String sColumnName = null; 
      while (blag) { 

       sColumnName = (String) JOptionPane.showInputDialog(jTable1, "Enter Column Name", "Add Column", JOptionPane.INFORMATION_MESSAGE, null, null, null); 

       if (sColumnName == null) { 
        return; 
       } 
       if (sColumnName.trim().equalsIgnoreCase("")) { 
        JOptionPane.showMessageDialog(jTable1, "Column name can not be blank."); 
        blag = true; 
       } else { 
        blag = false; 
       } 

      } 
      int viewColumn = jTable1.convertColumnIndexToView(column); 
      TableColumn tableColumn = jTable1.getColumnModel().getColumn(viewColumn); 
      tableColumn.setHeaderValue(sColumnName); 
      jTable1.getTableHeader().repaint(); 

代碼在JTable中添加新列。

boolean blag = true; 
      String sColumnName = null; 
      while (blag) { 

       sColumnName = (String) JOptionPane.showInputDialog(jTable1, "Enter Column Name", "Add Column", JOptionPane.INFORMATION_MESSAGE, null, null, null); 

       if (sColumnName == null) { 
        return; 
       } 
       if (sColumnName.trim().equalsIgnoreCase("")) { 
        JOptionPane.showMessageDialog(jTable1, "Column name can not be blank."); 
        blag = true; 
       } else { 
        blag = false; 
       } 

      } 

      defaultTableModel.addColumn(sColumnName); 

但問題是,當我重新命名列,然後添加新列,是越來越增加了一個新列,但只顯示重命名的列的舊名。

如何將默認表模型與表頭進行同步?

回答

3

在Default/TableModel上沒有重命名頭的API。選項,其一是子類/實現自定義模型或欺騙默認情況下,像這樣的(僞代碼)的東西:

Object[] headers = new Object[tableModel.getColumnCount()]; 
forEach (model-column) 
    if (index == renamedColumn) 
     headers[index] = newHeader 
    else 
     headers[index] = tableModel.getColumnName(index) 
tableModel.setColumnIdentifiers(headers) 

(注:假設標識符是名相同)

+1

+1很好的答案。 – Boro 2011-04-22 10:47:00

+0

@trashgod - 感謝編輯,我的上網本在sssss上打招呼:-) – kleopatra 2011-04-22 16:02:53