我需要从仅包含数据,colspan和rowspan的2d数组生成html表 . 我不需要边距,高度和宽度 . 只有td和tr . 我知道表格单元格的宽度和高度,结果总是矩形 . 我需要在java中完成它,但任何提示都是受欢迎的 .
这是一个示例单元类:
public class Cell {
String label;
int colSpan, rowSpan;
public Cell(String label, int colSpan, int rowSpan) {
this.label = label;
this.colSpan = colSpan;
this.rowSpan = rowSpan;
}
}
这是一个包含数据和rowspan / colspan信息的2d数组的例子;
public class Test {
public static void main(String[] args) {
List<List<Cell>> rows = new ArrayList<>();
List<Cell> row1 = new ArrayList<>();
Cell cell11 = new Cell("total", 1, 9);
Cell cell12 = new Cell("mid_total", 1, 3);
Cell cell13 = new Cell("detail", 1, 1);
row1.add(cell11);
row1.add(cell12);
row1.add(cell13);
rows.add(row1);
List<Cell> row2 = new ArrayList<>();
Cell cell21 = new Cell("mid_total", 1, 3);
Cell cell22 = new Cell("detail", 1, 1);
row2.add(cell21);
row2.add(cell22);
rows.add(row2);
List<Cell> row3 = new ArrayList<>();
Cell cell31 = new Cell("mid_total", 1, 3);
Cell cell32 = new Cell("detail", 1, 1);
row3.add(cell31);
row3.add(cell32);
rows.add(row3);
List<Cell> row4 = new ArrayList<>();
Cell cell41 = new Cell("detail", 1, 1);
row4.add(cell41);
rows.add(row4);
List<Cell> row5 = new ArrayList<>();
Cell cell51 = new Cell("detail", 1, 1);
row5.add(cell51);
rows.add(row5);
List<Cell> row6 = new ArrayList<>();
Cell cell61 = new Cell("detail", 1, 1);
row6.add(cell61);
rows.add(row6);
List<Cell> row7 = new ArrayList<>();
Cell cell71 = new Cell("detail", 1, 1);
row7.add(cell71);
rows.add(row7);
List<Cell> row8 = new ArrayList<>();
Cell cell81 = new Cell("detail", 1, 1);
row8.add(cell81);
rows.add(row8);
List<Cell> row9 = new ArrayList<>();
Cell cell91 = new Cell("detail", 1, 1);
row9.add(cell91);
rows.add(row9);
}
}
这是它应该是这样的:
+-------+-----------+--------+
| total | mid_total | detail |
+ + +--------+
| | | detail |
+ + +--------+
| | | detail |
+ +-----------+--------+
| | mid_total | detail |
+ + +--------+
| | | detail |
+ + +--------+
| | | detail |
+ +-----------+--------+
| | mid_total | detail |
+ + +--------+
| | | detail |
+ + +--------+
| | | detail |
+-------+-----------+--------+
3 回答
这是我的源行的样子,尝试并自己查看 .
迭代2d数组中的行和列,并使用
StringBuilder
创建HTML标记 .如果你这样使用它:
它会产生这个:
您可以为单元格创建容器类,以管理多列和多行单元格的正确定位 .
您有一个插槽网格,当您放置一个跨越多个列或行的单元格时,您将使此大单元占用的插槽无效,仅在左上方插槽中保留对实际单元格的引用 . 打印标记时,请勿打印无效的单元格 .
您似乎自上而下创建表,因此自然的方法是跟踪当前行和列,以便插入单元格可以找到下一个可用的单元格 .
如果您不想事先确定表格的大小或摇动不断调整大小的单元格网格,则可以将单元格存储在哈希映射中,并将其在网格中的位置作为键,以便您可以轻松附加单元格而不必担心溢出 table .
下面是您的示例表的实现 . 我已经在D中写了代码 . 我认为主要的想法应该是明确的 . D具有内置的关联数组,
V[K]
对应于Java的java.util.HashMap<K, V>
.