JTable中单元格添加了自定义的JCheckBox之后如何为其添加name??
用fest-swing做单元测试的时候需要name来实现界面的点击操作,现在checkbox是通过渲染器来嵌入到table中的,我在renderer中的getTableC...
用fest-swing做单元测试的时候需要name来实现界面的点击操作,现在checkbox是通过渲染器来嵌入到table中的,我在renderer中的getTableCellRendererComponent()方法中用this.setname,还是在测试的时候找不到对应名称的checkBox,求大神指导。解决了分不够再加
展开
1个回答
展开全部
JTable 中那个 renderer 组件只是临时用途,在设计中它只在它的一次生命周期中有效,换句话说,一个组件可以在 JTable 的重画过程中被重用多次,我们要意识到它是一个无状态的组件,或者说是一个它只在它的生命周期内有状态值,我们可以在 TableCellRender 的实现类中每个方法中打印日志来观察它的生命周期,这样我们就知道怎么跟踪它。
最后一句话,那个 render 并不是 JTable 的组成部分,它仅是在 JTable 的各个 cell 需要重画时的”临时工“,它可以一个人兼职所有的单元格的工作,例如我们做一个 Tree Table 时就可以也这样让一个 Tree 在每行的第一个格子需要重画时”说好我们只把这个 JTree 对应到那个当前行的那个范围内的图形内容画在指定的单元格范围内“,一个 JTree 用在了所有行。
要自动跟踪一个单元格可能需要用坐标值对比 TableModel 或 TableColumnModel 来找到对应的列名。
另外, render 只在”将要显示这个单元格时“有职责,比如编辑完成按 enter 之后或表格刚显示出来,而当点击单元格时似乎是 table cell editor 的职责,因为它首先需要知道在点击的一瞬间当前格子是否允许编辑,如果不允许就什么也不做直接去 render 去刷新一下选中的边框,如果允许编辑就会得到它的 getTableCellEditorComponent(...)来开始一次编辑的生命周期。
最后一句话,那个 render 并不是 JTable 的组成部分,它仅是在 JTable 的各个 cell 需要重画时的”临时工“,它可以一个人兼职所有的单元格的工作,例如我们做一个 Tree Table 时就可以也这样让一个 Tree 在每行的第一个格子需要重画时”说好我们只把这个 JTree 对应到那个当前行的那个范围内的图形内容画在指定的单元格范围内“,一个 JTree 用在了所有行。
要自动跟踪一个单元格可能需要用坐标值对比 TableModel 或 TableColumnModel 来找到对应的列名。
另外, render 只在”将要显示这个单元格时“有职责,比如编辑完成按 enter 之后或表格刚显示出来,而当点击单元格时似乎是 table cell editor 的职责,因为它首先需要知道在点击的一瞬间当前格子是否允许编辑,如果不允许就什么也不做直接去 render 去刷新一下选中的边框,如果允许编辑就会得到它的 getTableCellEditorComponent(...)来开始一次编辑的生命周期。
更多追问追答
追问
谢谢,我知道了
但是还有其他方法可以给JTable的表头设置name属性么,或者说fest-swing中的什么方法可以通过坐标来点击表头么,fest-swing API太难找了。
追答
你想自动模拟点击表头啊?这个看起来很奇怪啊,因为实际上表格内部分没有任何组成部分,没有 child component,(你没找到 table.add() 的使用情况吧?)我的理解是这样的:
不存在直接点击表头或单元格的情况,接收到事件的首先是表格本身,因此你应该是先得到表格的 TableModel 知道所有列以及每个列的宽度,最后向表格中的某个计算出来的坐标位置发起事件,是向表格发起事件。
我之前没听说过 fest-swing,也不知道具体它是怎么发起模拟点击事件的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询