我正在处理应用程序的一部分,该应用程序显示有关由FrameInfo类表示的视频文件的统计数据的表。现在,当我刚开始有一个表格模型可以完成包括格式化在内的所有工作时,我将它重构为另一个极端,并且表格模型只为每行返回FrameInfo实例,然后让CellRenderer决定渲染哪个字段以及每个字段的显示方式柱。这很棒,因为我可以做很棒的事情,比如切换显示屏等。时间码值只能通过重绘,在刻度,秒或时间码(“00:01:02:03”)之间。我很高兴,直到我将表格内容复制并粘贴到gdocs电子表格中,并注意到我只在所有单元格中获得了模型对象的toString()输出(当我开始考虑它时显然不符合逻辑,但显然不是我想要的) 。当使用JTable时,TableCellRenderer和TableModel之间的职责分工是什么?
我的选择,据我现在可以看到他们:
1)把一切恢复到模型
优点: 我会在剪贴板中的一切,因为它显示出来,当我复制
缺点: - 用于触发模型事件切换时间码 的显示模式时 - 写荧光笔(我用JXTables顺便说一句。)将再次成为凌乱,因为我必须做的字符串匹配,在那里我现在可以使用我的模型对象
2)离开,因为它是现在和构建一个使用渲染器,然后提取从渲染标签
优点文本自定义复制动作: - 表代码保持清洁
缺点: - 工作量(?) - 对于像圆形数字这样的东西,我会失去准确性
3)将所有但动态的东西(timecode)放入模型中,并在渲染器中执行时间代码,没有得到WYSIWYG复制&粘贴OSE列
优点&缺点: - 更多或更少的半称职的妥协
任何意见或者甚至退出一些代码,我可以使用,任何人吗?
谢谢你的时间!
为JXTable,要走的路是让一个自定义的TransferHandler使用xTable.getStringValueAt得到完全相同的字符串表示用于重ndering(和搜索,和正则表达式过滤和排序和... :-) – kleopatra
@kleopatra:请考虑做出这个答案。 – trashgod