2011-06-07 54 views
2

将JTable列设置为不可见后,我无法获取对组件的引用。设置不可见后无法访问Jtable列数据

Component cellEditor; 
String name; 
String value; 
// loop row then column 
for(int j=0 ; j<tolCol ; j++){ 
    /* get cell name in JTable */ 
    System.out.println(j + " " + ((JTable)comp).getModel().getValueAt(0, j)); 
    tce = ((JTable)comp).getCellEditor(0, j); // <-- ArrayIndexOutOfBounds 
} 

当我使用的System.out.println(J + “” +((JTable的)COMP).getModel()getValueAt(0,j)的);我设法打印出所有的价值。还有什么我需要做的,以获得组件的参考?

回答

1

JTable中列设置为 无形

之后如果您在以使其无形,那么你会得到ArrayIndexOutOfBoundException去除列。但你可以访问((JTable)comp).getModel().getValueAt(0, j)

+0

没错,我已经删除了列,使其不可见。 我需要获取该单元的组件,因为那里有相当多的信息。在这种情况下获得价值是不够的。 – Reusable 2011-06-07 14:51:03

1

你为什么认为你需要隐藏列的单元格编辑器。这听起来像一个糟糕的设计。

即使您的代码访问数据不正确,因为模型和视图可能会不同。模型中列的顺序不会改变。让我们假设您的表模型可以包含3列中的以下数据:“字符串”,“整数”,“日期”。现在让我们假设用户通过将“Date”列拖到表的第一列来重新排序表。

现在,当你访问table.getModel()。getValueAt(row,0)时,你会得到一个“String”值。

当你访问table.getCellEditor(row,0)时,你会得到一个“Date”对象的编辑器。

访问默认的编辑器给定类类型,你可以这样做:

Class clazz = table.getModel().getColumnClass(0); 
TableCellEditor tce = table.getDefaultEditor(clazz); 
+0

因为柱子不可移动,所以无需担心。 目前我正在使用setcolumn大小为0作为临时解决方案。 我仍然无法使用上面提供的示例访问组件。 – Reusable 2011-06-09 03:11:03

+0

该组件没有任何其他信息。当你调用编辑器时,它会从模型中获取数据并将其显示在编辑器中,所以我仍然不明白你想要做什么。 – camickr 2011-06-09 16:15:18