0

我正在编写一个程序来对从csv文件或数据库导入的数据进行一些统计分析。我可以将数据加载到 a 中jTable并显示,但我正在为下一步而苦苦挣扎。

我希望能够单击列标题并将列内容的摘要统计信息显示在面板侧面的标签中jTable(见图)。

在此处输入图像描述

任何人都可以建议查看类似项目的方法或示例代码吗?任何帮助,将不胜感激。

编辑:我在 netbeans 中这样做。通常在 netbeans 中,我只需在设计模式下单击组件,然后通过右键单击添加侦听器,然后在源选项卡上填写代码。但是,当在设计选项卡中不可见时,我不确定如何将侦听器添加到表或标题中。

4

3 回答 3

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参考

于 2012-04-07T19:02:17.717 回答
1

对于监听器部分,我使用了这里的信息:

在 JTable 组件中侦听对列标题的点击

于 2012-04-07T20:30:07.457 回答
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
}

对象数组可用于计算您需要的摘要,例如查找范围、标准偏差等。这些应该是微不足道的。请记住在调用方法中对 Object 数组进行类型转换。

于 2012-04-07T20:32:15.193 回答