Java 如何在JTable中的特定位置插入列

Java 如何在JTable中的特定位置插入列,java,swing,jtable,defaulttablemodel,Java,Swing,Jtable,Defaulttablemodel,我有一个带有预定义模型的JTable 如何要求模型在特定位置插入特定列 因此,我需要一些类似于:DefaultTableModel.insertRow(int,Object[])的列是否真的需要将列添加到您的表格模型中的特定索引处?您可以更轻松地调整视图中的列顺序(JTable),如javadoc类中所述 默认情况下,可以在JTable中重新排列列,以便视图的列以与模型中的列不同的顺序显示。这根本不会影响模型的实现:当列被重新排序时,JTable在内部维护列的新顺序,并在查询模型之前转换其列索引

我有一个带有预定义模型的JTable

如何要求模型在特定位置插入特定列


因此,我需要一些类似于:DefaultTableModel.insertRow(int,Object[])的列

是否真的需要将列添加到您的
表格模型
中的特定索引处?您可以更轻松地调整视图中的列顺序(
JTable
),如javadoc类中所述

默认情况下,可以在JTable中重新排列列,以便视图的列以与模型中的列不同的顺序显示。这根本不会影响模型的实现:当列被重新排序时,JTable在内部维护列的新顺序,并在查询模型之前转换其列索引

这是通过使用该方法实现的


将列添加到您的
DefaultTableModel
已完成调用方法是否确实需要将列添加到您的
TableModel
中的特定索引处?您可以更轻松地调整视图中的列顺序(
JTable
),如javadoc类中所述

默认情况下,可以在JTable中重新排列列,以便视图的列以与模型中的列不同的顺序显示。这根本不会影响模型的实现:当列被重新排序时,JTable在内部维护列的新顺序,并在查询模型之前转换其列索引

这是通过使用该方法实现的


将列添加到您的
DefaultTableModel
时,使用DefaultTableModel调用方法:

最后必须调用
fireDataChanged
。只有一个带有多个重载的
addColumn
。这并不妨碍,因为显示顺序是独立的。可能会将列移动到另一个位置,并且必须处理视图索引!=列索引。要在添加列后立即获得正确的视图索引,必须访问JTable并调用
moveColumn


我发现有时创建一个新的TableModel并分配它更容易。或者不使用DefaultTableModel。

使用DefaultTableModel:

最后必须调用
fireDataChanged
。只有一个带有多个重载的
addColumn
。这并不妨碍,因为显示顺序是独立的。可能会将列移动到另一个位置,并且必须处理视图索引!=列索引。要在添加列后立即获得正确的视图索引,必须访问JTable并调用
moveColumn

我发现有时创建一个新的TableModel并分配它更容易。或者不使用DefaultTableModel。

没有类似DefaultTableModel.insertRow()的insertColumn方法用于插入行。要在特定位置插入列,必须使用DefaultTable.addColumn()追加该列,然后将新列移动到所需位置

没有类似DefaultTableModel.insertRow()的insertColumn方法用于插入行。要在特定位置插入列,必须使用DefaultTable.addColumn()追加该列,然后将新列移动到所需位置

这个链接可能会有所帮助

这个链接可能会有所帮助


从Jtable中重新排序列会影响模型吗?不会。这甚至包括在我的回答中(在从javadoc复制的代码片段中)。视图中的顺序与模型中的顺序完全独立。这就是为什么
JTable
有所有这些转换索引方法,例如ok,这可能会给我带来麻烦,那么如何添加列而不将其添加到模型中呢?JTable.addColumn会影响模型吗?不会。JTable本身不包含任何数据。所有数据都从模型中检索。可以考虑在现有模型中添加一个额外的列,而不影响原始模型。通过使用decorator,您可以在您想要的任何索引处添加列从Jtable重新排序列会影响模型吗?不。这甚至包括在我的回答中(在从javadoc复制的代码片段中)。视图中的顺序与模型中的顺序完全独立。这就是为什么
JTable
有所有这些转换索引方法,例如ok,这可能会给我带来麻烦,那么如何添加列而不将其添加到模型中呢?JTable.addColumn会影响模型吗?不会。JTable本身不包含任何数据。所有数据都从模型中检索。可以考虑在现有模型中添加一个额外的列,而不影响原始模型。通过使用decorator,您可以在需要的任何索引处添加列。最后,您必须调用fireDataChanged No.a)添加列会更改结构,因此在自定义模型实现中触发的相应事件是structureChanged b)dtm.addColumn(..)已经触发了正确的事件,无需做任何事情在结束时必须调用fireDataChanged no.a)添加列会更改结构,因此在自定义模型实现中触发的相应事件是structureChanged b)dtm.addColumn(..)已触发正确的事件,没必要anything@moderator:将yannis hristofakis在更完整的答案中已经使用的确切方法调用包装到另一个不添加任何值的方法中不会。。。添加任何值;-)否决。@主持人:将yannis hristofakis在更完整的答案中已经使用的确切方法调用包装到另一个不增加任何值的方法中不会。。。添加任何值;-)被否决。
    JTable table = new JTable(rows, cols);
    table.setAutoCreateColumnsFromModel(false);

    DefaultTableModel model = (DefaultTableModel)table.getModel();
    TableColumn col = new TableColumn(model.getColumnCount());

    col.setHeaderValue(headerLabel);
    table.addColumn(col);
    model.addColumn(headerLabel.toString(), values);
    table.moveColumn(table.getColumnCount()-1, vColIndex);
public void positionColumn(JTable table,int col_Index) {
 table.moveColumn(table.getColumnCount()-1, col_Index);
  }