求救,Swing中我实现TableCellEditor给JTable的一列添加了一个编辑器

求救,Swing中我实现TableCellEditor给JTable的一列添加了一个编辑器,编辑器中是一个控件有一个输入框,一个按钮,但这个控件是一个单独的类,并且还要传... 求救,Swing中我实现TableCellEditor给JTable的一列添加了一个编辑器,编辑器中是一个控件有一个输入框,一个按钮,但这个控件是一个单独的类,并且还要传参数进去,我遇到的问题是,这样做了之后给每一行的这一列传入不同的参数之后,点击按钮弹出的是一样的东西。好像这些行的该列用的是同一个编辑器对象一样,改变一个其他的都跟着变化了 ,这是怎么回事。急死人啦,求高手指点,谢谢! 展开
 我来答
jamxval
推荐于2016-05-27 · TA获得超过6821个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1404万
展开全部

这跟你在 getEditorComponent 中返回的是不是同一个对象有关系。

首先,我们确实只需要同一个 Editor component,从 Cell Editor 的设计来看,它应该是一个 Stateless 无状态组件,也就是说每次一个生命周期完成之后,它的状态值不应该在下一次新的生命周期中被使用,而是应该完全重新重置状态。


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  时设定它当前要显示出来的组件是什么 。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式