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

Java 如何制作每行有多行的表格?,java,swing,jtable,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

我试图找到一种方法来创建一个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以包含一个“sub-row”属性,但这意味着还需要定制TableColumnModel、JTableHeader和Jtable以及Jpanel。我怀疑渲染器和所有LookandFeel用户界面也需要修改

我遇到的一个棘手的问题是,为每一列的子行创建一个表,然后使用某种形式的变体jpanel来公开沿y轴交错的渲染行。我不确定这是否适用于滚动条


那么,有没有人有一个简洁明了的方法来实现这一点?有关于如何继续的建议吗?

我希望您能重新组织输出,使其更具可读性。虽然这确实可以将数据放在页面上,但阅读它的人在试图理解哪些表单元格属于哪个标题以及哪些行属于哪个行时会遇到很多问题

您能否先创建只有“重要”数据可见的行,然后用户可以单击(或某些手势)打开更详细的结果?或者在多行单元格中同时包含多个单元格值,以将数据减少到每条记录的一行

这给了你两大好处。首先,数据一目了然,其次,您可以使用现有的表实现,节省大量的开发工作


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

我希望您能重新组织输出,使其更具可读性。虽然这确实可以将数据放在页面上,但阅读它的人在试图理解哪些表单元格属于哪个标题以及哪些行属于哪个行时会遇到很多问题

您能否先创建只有“重要”数据可见的行,然后用户可以单击(或某些手势)打开更详细的结果?或者在多行单元格中同时包含多个单元格值,以将数据减少到每条记录的一行

这给了你两大好处。首先,数据一目了然,其次,您可以使用现有的表实现,节省大量的开发工作


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

我不能提供任何代码,但您可以考虑定制表模型(
类MyTableModel扩展AbstractTableModel{…}


方法可能是重载SetValueAt(Object value,int row,int col)方法,例如,写入第1行、第3列实际上会写入第2行、第1列等等,以便为数据表的一行显示多行。我不能提供任何代码,但您可以考虑定制表模型(
类MyTableModel扩展了AbstractTableModel{…}


方法可能是重载SetValueAt(Object value,int row,int col)方法,例如,写入第1行、第3列实际上会写入第2行、第1列等,以便为数据表的1行显示多行。您确实需要防止某些列滚动的行为吗

这是一个非常标准的可用性解决方案。我建议您使用一个对话框来隐藏和冻结列。在这种情况下,用户可以按他们目前感觉最好的方式组织视口。这是一个滚动冻结的示例

第二个选项可能是HTML。您可以通过这种方式生成任何您想要的内容。但是如果您需要编辑数据,此解决方案可能会有限制

人体工程学建议:

  • 垂直显示标题或数据是否可以接受?有时可读性更好

  • 您确实需要防止某些列滚动的行为吗

    这是一个非常标准的可用性解决方案。我建议您使用一个对话框来隐藏和冻结列。在这种情况下,用户可以按他们目前感觉最好的方式组织视口。这是一个滚动冻结的示例

    第二个选项可能是HTML。您可以通过这种方式生成任何您想要的内容。但是如果您需要编辑数据,此解决方案可能会有限制

    人体工程学建议:

  • 垂直显示标题或数据是否可以接受?有时可读性更好

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


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


    也许看看,这个用例似乎需要一个返回复合组件的呈现器。大多数用户会发现每行9列更好行。此表是否支持按每个单元格值排序?正如我所说,这些不是组标题。不为所有列使用一行的原因是,其中一些列非常宽,