2012-04-02 33 views
1

我試圖將隱藏列的數據顯示爲工具提示。隱藏是可以正常使用使用以下代碼:如何在工具提示中使用jTable的隱藏列數據

JTable table = new JTable(model){ 
     //Implement table cell tool tips.   
     public String getToolTipText(MouseEvent e) { 
      String tip = null; 
      java.awt.Point p = e.getPoint(); 
      int rowIndex = rowAtPoint(p); 
      int colIndex = columnAtPoint(p); 
      int realColumnIndex = convertColumnIndexToModel(colIndex); 

      try { 
       tip = getValueAt(rowIndex, 8).toString(); 
      } catch (RuntimeException e1) { 
       //catch null pointer exception if mouse is over an empty line 
      } 

      return tip; 
     } 
    }; 

    TableColumnModel tcm = table.getColumnModel(); 

    TableColumn tc; 
    for(int i = 1; i <= 7; i++){ 
     tc = tcm.getColumn(8); 
     tcm.removeColumn(tc); 
    } 

但工具提示沒有顯示(getValue函數沒有返回值)隱列的數據。那麼隱藏列也會刪除數據嗎?

回答

5
  1. 你並不需要爲循環只要你不使用i變量;-)
  2. removeColumnJTable不從模型中取出數據,顯然在Javadoc指出

    從此JTable的列數組中移除aColumn。注意:此方法不會從模型中刪除數據列;它只是刪除負責顯示它的TableColumn。

    有一個在Javadoc來TableColumnModel同樣的方法沒有提及,但我認爲它的工作方式相同,但你總是可以給它一個嘗試調用它的JTable,而不是

  3. 在你的代碼的真正問題是使用getValueAt,它採用表格的行和列的索引,而不是模型的

    注:列是以表視圖的顯示順序指定的,而不是以TableModel的列順序。這是一個重要的區別,因爲當用戶重新排列表中的列時,視圖中給定索引處的列將會改變。同時用戶的操作不會影響模型的列排序。

    而且,由於您刪除了該列,因此該表格根本不存在。改爲在模型上調用getValue方法,而不要忘記將row index