如何制作每行多行的表格?

时间:2014-04-03 02:34:33

标签: java swing jtable

我试图找到一种方法来创建一个Java表(Swing组件),它可以将列列表包装成每行多行。

     /[     Column Hdr A    ][    Column Hdr B    ]
Hdr  |[ Column Hdr C  ][columnHdr D ][ColumnHdr E ]
     \[    column Hdr F ][COlhdr G][colhdr H][CH I]
     /[     Cell 1 A        ][    Cell 1 B        ]
Row 1|[ Cell 1 C      ][cell 1 D    ][Cell 1 E    ]
     \[    Cell 1     F ][Cell 1 G][Cell 1 H][C 1I]
...

每个列大小独立于任何其他列。 IE:我没有进行跨越或列标题分组。它应该保留列调整大小,隐藏和排序功能。拖放重新排序会很好但不是必需的。

所以我到处搜索这样的事情。我发现的是用于跨越单元格或使用固定宽度子列的各种方案。有一个人声称通过覆盖getRect来完成它,但没有代码可以查看,所以我不确定如何调整大小或隐藏列,以及如何指定哪些列去了在哪里?

我考虑过将TableColumn扩展为包含"子行"属性,但这意味着还有自定义TableColumnModel,JTableHeader和Jtable,和Jpanel。我怀疑渲染器和所有LookandFeel用户界面也必须进行修改。

我遇到的一个丑陋的黑客是每个子行创建一个表,然后使用某种形式的突变jpanel来暴露沿y轴交错的渲染行。我不确定它是否适用于滚动条。

那么,有没有人有一个简洁明了的方法来实现这个?有关如何进行的任何建议吗?

4 个答案:

答案 0 :(得分:1)

我希望你能重新组织输出,使其更具人性化。虽然这确实使数据适合页面,但人类阅读它会有很多问题试图理解哪个表格单元属于什么标题和哪一行是哪个。

您是否可以创建仅包含' important'数据首先可见,然后用户可以点击(或某些手势)打开更详细的结果?或者在多行单元格中包含多个单元格值,以将数据减少到每个记录的单行?

这给你带来了两大好处。首先,数据一目了然是可以理解的,其次,您可以使用现有的表实现,并为自己节省重要的开发工作。

最后,您是否尝试过使用HTML小部件来显示数据?您可以在HTML中将表创建为div,并让窗口小部件包裹行。然后,您可以将每列的单元格设置为固定宽度。

答案 1 :(得分:1)

我无法为您提供任何代码,但您可以考虑自定义表格模型(class MyTableModel extends AbstractTableModel {...})。

方法可能是重载SetValueAt(Object value,int row,int col)方法,以便写入第1行,例如第3列实际上会写第2行,第1列,依此类推,以显示1行的多行你的数据表

答案 2 :(得分:1)

您确实需要阻止某些列滚动的行为吗?

这是一个非常标准的可用性解决方案。我建议你想出一个允许隐藏和冻结列的对话框。在这种情况下,用户可以按照他们目前最好的方式组织视口。 Here是滚动冻结的一个例子。

第二个选项可能是HTML。你可以用这种方式生成你想要的任何东西虽然如果您需要编辑数据,此解决方案可能会有限制。

人体工程学建议:

  1. 垂直显示标题或数据是否可以接受?有时它更易读。

答案 3 :(得分:1)

基本上,JTable支持添加包括嵌套表或单元格的swing组件。请参阅ff链接

com.lang.java.gui discussion

a similar thread