2012-04-07 97 views
0

我正在編寫一個程序,對從csv文件或數據庫導入的數據進行一些統計分析。我可以將數據加載到jTable並顯示,但我正在爲下一步努力。Java:爲選定列提供摘要統計信息的代碼示例

我希望能夠單擊列標題,並有在面板的jTable側面顯示在標籤欄的內容的概要統計(見圖片)。

enter image description here

有人能想出方法來看待或類似項目的示例代碼?任何幫助,將不勝感激。編輯: 我在netbeans做這個。通常在NetBeans中,我只需在設計模式中單擊組件,然後通過右鍵單擊添加一個偵聽器,然後在源選項卡上填寫代碼。但是,我不確定如何在設計選項卡中看不到如何將偵聽器添加到表或標題。

+0

你面臨的困難是什麼?它無法獲取列內容嗎?還是無法獲得被選中的列? – vaisakh 2012-04-07 19:10:22

+0

@vaisakh:兩者都有。我假設我需要某種類型的偵聽器,但是我之前從未做過這種工作,通常會將其他人的代碼用於類似的項目(主要是因爲我發現javadoc不可讀/無用),但無法找到類似於調整的任何內容。 – screechOwl 2012-04-07 19:14:32

回答

1

所以,這個問題有兩個部分: -

  1. 事件處理程序在列被選中時執行。

  2. 獲取摘要的代碼。

對於第一個(事件處理程序),您可以參考@ Jeffrey的答案。對於摘要部分,你可以寫這樣的方法:

/* Method to return values in a column of JTable as an array */ 

public Object[] columnToArray(JTable table, int columnIndex){ 
    // get the row count 
    int rowCount = table.getModel().getRowCount(); 
    // declare the array 
    Object [] data = new Object[rowCount]; 
    // fetch the data 
    for(int i = 0; i < rowCount; i++){ 
     data[i] = table.getModel().getValueAt(i, columnIndex);   
    } 
    return(data); 
} 

調用此方法從這樣的事件處理中:

public void columnSelectionChanged(ListSelectionEvent e) { 
    //assuming single column is selected 
    Object[] data = columnToArray(table,table.getSelectedColumn()); 
    /* type cast if using specific data type. for eg: 
    * Integer[] data = (Integer[]) columnToArray(table,table.getSelectedColumn()); 
    */ 
    // other functions to create the summary 
} 

對象陣列可以被用來計算你需要的總結,如找到範圍,標準偏差等。這些應該是微不足道的。請記住在調用方法中對類型數組進行類型轉換。

1
JTable table = ... 
TableColumnModel columnModel = table.getColumnModel(); 
columnModel.add(new TableColumnModelListener() { 
    // other methods 
    public void columnSelectionChanged(ListSelectionEvent e) { 
     // user selected or deselected a column, change summary as necessary 
    } 
} 

TableColumnModel reference

+0

+1由於[這裏]概述的原因(http://stackoverflow.com/a/7146216/230513),雖然有一個示例頭組件[附近](http://stackoverflow.com/a/7137801/230513) .. – trashgod 2012-04-07 23:32:32