我在JTable工作,我有这样的要求。 说有4列,即10,20,30,40
现在价值通常为10-20 20-30和30-40 因此,我们很容易显示此范围的名称。
但最近这些价值已开始随机出现,如15-25 10-25,25-30
在这种情况下,我们的JTable应该动态调整行的大小,使其表示该范围,这意味着它不应该干扰现有的单元格,只会干扰偏离正常范围的行。
更准确地说,我应该能够根据单元格的内容合并和拆分单元格。
编辑:就像这样。在特定时间点为某人分配任务
10| |20| |30|
|----------|
|----------|
表示10-20和20-30。第一行10,20,30是列名。第二行是表示10-20和20-30的框的图形表示。如果值为15-25来自
10| |20| |30|
|----------| |----------|
|-----------|
|-----------|
|-------------|
|----------| |----------|
实际上在第一行和第四行之间没有间隙只是为了表明它们是单独的单元格。现在数据来自15-25的中间范围,我们必须重新对齐单元格形状如上所述此
答案 0 :(得分:3)
您可以在“模型”或“视图”级别合并JTable列。在Swing中没有特别好的支持(也就是说,没有“jTable.mergeColumns(colA,colB)”内置功能)。
假设你有一个这样的表:
A B C
1 2 3
2 4 6
如果在模型级别合并列B和C,则模型会说只有2列(A和B + C),并且会定义第二个“B和C”列的值,比如2 + 3 = 5和4 + 6 = 10;或者它可以说这个列字符串的值,例如“2 3”和“4 6”。
如果在View级别合并这些列,则必须为列B和C提供自己的ColumnCellRenderer,并以某种方式避免绘制网格线。我不推荐这种方法。
最后一个选项是同时更改模型和视图:您可以通过替换 akf 指定的代码(可以从http://www.codeguru.com/java/articles/139.shtml下载压缩版本)通过以下方式开始AttributiveCellTableModel
的{{1}}方法:
setDataVector()
在jdk6
下为我工作正常答案 1 :(得分:2)
我在Swing中实现的唯一这个地方是the third example in this link。这里介绍的关键方面是覆盖getCellRect
中的JTable
方法并覆盖表UI以进行绘制。