Java 修改JTable中的整个列

Java 修改JTable中的整个列,java,swing,jtable,mouselistener,listselectionlistener,Java,Swing,Jtable,Mouselistener,Listselectionlistener,我有一个JTable,它是通过从文本文件导入数据形成的。这是一个巨大的表,大约有522列和数千行。此表中的许多单元格也是空的。 现在,我希望能够对某些列中可用的数据应用一些数学运算。现在,我可以选择多个列,但我不知道如何获取这些值。我知道我需要一个数组数组,在这里我可以存储表列中的值,然后根据我的算法修改每个值。 现在,简单地说,我只想能够打印出select列中的值(只打印一个以保持简单),但我做不到,我会将特定单元格的值打印2-4次。我的测试代码如下: 对于整个选择列,我使用以下代码: pub

我有一个JTable,它是通过从文本文件导入数据形成的。这是一个巨大的表,大约有522列和数千行。此表中的许多单元格也是空的。 现在,我希望能够对某些列中可用的数据应用一些数学运算。现在,我可以选择多个列,但我不知道如何获取这些值。我知道我需要一个数组数组,在这里我可以存储表列中的值,然后根据我的算法修改每个值。 现在,简单地说,我只想能够打印出select列中的值(只打印一个以保持简单),但我做不到,我会将特定单元格的值打印2-4次。我的测试代码如下: 对于整个选择列,我使用以下代码:

public static void selectWholeColumn(final JTable table)
{
 final JTableHeader header = table.getTableHeader(); 
 header.addMouseListener(new MouseAdapter() 
 {  
        public void mouseClicked(MouseEvent e) 
        {  
            int col = header.columnAtPoint(e.getPoint());   
            if(header.getCursor().getType() == Cursor.E_RESIZE_CURSOR) 
            {
                e.consume();  
            }
            else 
            {   
                table.setColumnSelectionAllowed(true);
                table.setRowSelectionAllowed(false);
                table.clearSelection();
                table.setColumnSelectionInterval(col,col);
                table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);                  

            }  
        } 

    }); 

} 
在我的GUI中,我有一个按钮,单击该按钮时会触发一个后端类,并执行该方法,该方法将JTable作为参数,以打印所选列中所有行的值:

public void filterData(final JTable table)
{
    TableModel model = table.getModel();
     table.setCellSelectionEnabled(true);
    table.setColumnSelectionAllowed(true);
    table.setRowSelectionAllowed(false);
        ListSelectionModel cellSelectionModel = table.getSelectionModel();
        cellSelectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

        cellSelectionModel.addListSelectionListener(new ListSelectionListener() 
        {
          public void valueChanged(ListSelectionEvent e)
          {
            String selectedData = null;

            int[] selectedRow = table.getSelectedRows();
            int[] selectedColumns = table.getSelectedColumns();

            for (int i = 0; i < selectedColumns.length; i++) 
            {
              for (int j = 0; j < selectedRow.length; j++) 
              {
                selectedData = (String) table.getValueAt(selectedRow[i], selectedColumns[j]);
              }
            }
            System.out.println("Selected: " + selectedData);
          }

        });
public void filterData(最终JTable表)
{
TableModel模型=table.getModel();
table.setCellSelectionEnabled(真);
table.setColumnSelectionAllowed(真);
table.setRowSelectionAllowed(false);
ListSelectionModel cellSelectionModel=table.getSelectionModel();
cellSelectionModel.setSelectionMode(ListSelectionModel.MULTIPLE\u INTERVAL\u SELECTION);
cellSelectionModel.addListSelectionListener(新建ListSelectionListener())
{
public void值已更改(ListSelectionEvent e)
{
字符串selectedData=null;
int[]selectedRow=table.getSelectedRows();
int[]selectedColumns=table.getSelectedColumns();
for(int i=0;i
关于如何打印或基本获取所选列中所有行的值,以便立即修改其中的数据,有什么建议吗


谢谢!

表格模型中循环,并在
列表选择监听器中使用
getValueAt()
是一种合理的方法,尽管每次更改都会调用监听器。您不清楚哪里出了问题;您可以

  • 使用
    StringBuilder
    连接选定的值

  • 将所选值累加到
    列表中

  • 表格模型
    中保留所选内容,如使用
    设置
    所示

  • TableCellRenderer
    ItemHandler
    中的选择上进行操作,如图所示