JTable表格

Table 的一个 cycle 是这样的:

  1. 当表格刚显示时它会搜索问每一行每一列 getCellRender 是什么,默认是得到一个 JLabel,它用这个 JLabel 赋值后显示出来,然后移动到下一个格式做同样的事情,这里的 JLabel 是同一个,只是在准备显示出来之前把当前格式的值更新上去。

  2. 当焦点落到某个格子时首先是询问 cell editor 这个格子是否 isEditable,如果不是,什么都不做,如果是的话,它的 getTableCellEditorComponent() 后设置值然后弹出来让用户输入新值。当验证值正确时会提交到 table model 中去,并且重新用 cell render 来显示它并关掉 cell editor。

 

这上面就是一个普通的生命周期。在 cell editor component 显示出来到用完了消失这个过程是完整的一次,它可以在这个周期内保持状态值,但在两个这样的周期之间它不应该交换状态值。

 

你希望每行编辑时看到的效果是不一样的,那么你应该做到 getTableCellEditorComponent 时来决定这个 JComponent 是什么样的,可以给每个不同的类型提供一个 cell editor component,然后在知道每行类型之后选择其中一个类型的 cell editor component 返回了。记得每次 getTableCellEditorComponent  时必须把跟数据有关系的状态重置,getTableCellEditorComponent  返回的 JComponent 在将要显示出来时应该是根据你设定的参数来显示的,这个过程是推迟了的因此它的参数需要记录在这个 JComponent 中,或者本身有一个 CardLayout 布局的多个不同的组件,在我们 getTableCellEditorComponent  时设定它当前要显示出来的组件是什么 。

 

 

http://blog.csdn.net/cannel_2020/article/details/7269073

你可能感兴趣的:(swing,表格,jtable)