All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.liyifeng.html.Table Maven / Gradle / Ivy

The newest version!
package org.liyifeng.html;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 * @author liyifeng
 *         2016年6月28日 下午5:04:10
 */
public class Table extends AbstractHtmlTag {

    private List tbody = new ArrayList();

    private List thead = new ArrayList();

    private Integer border;

    /**
     * 奇数行颜色
     */
    private String oddColor;

    /**
     * 偶数行颜色
     */
    private String evenColor;

    /**
     * 表头背景颜色
     */
    private String headBackgroundColor;

    /**
     * table的title标签内容
     * 同时也用于生成xls时sheet的名称
     */
    private String title;

    /**
     * Table默认样式:1.有边线
     */
    public Table() {
        super();
        this.border = 1;
        style("border-collapse", "collapse");
    }


    /**
     * @param headTrs 表头
     */
    public Table(Tr... headTrs) {
        super();
        for (Tr tr : headTrs) {
            this.thead.add(tr);
        }
    }

    /**
     * 合并另外一个table
     *
     * @param table 要合并的table
     */
    public void addAll(Table table) {
        if (table != null) {
            tr(table.tr());
        }
    }

    /**
     * 创建默认格式的table
*

* 1.表格边框单线;
* 2.表头颜色为浅蓝色; *

* * @return table */ public static Table table() { return new Table().border(1).style("border-collapse", "collapse").headBackgroundColor("#87CEFA"); } /** */ /** * 设置table隔行换色 * * @param oddColor 奇数行颜色 * @param evenColor 偶数行颜色 * @return this */ public Table trInterlaceColor(String oddColor, String evenColor) { this.oddColor = oddColor; this.evenColor = evenColor; return this; } /** * @param tr 行 */ public void tr(Tr tr) { this.tbody.add(tr); } /** * @param trs 多行 */ public void tr(Tr... trs) { for (Tr tr : trs) { this.tbody.add(tr); } } /** * @param trs 多行 */ public void tr(Collection trs) { for (Tr tr : trs) { this.tbody.add(tr); } } /** * @param tr 行 * @return this */ public Table append(Tr tr) { this.tbody.add(tr); return this; } /** * @param border 边框宽度 */ public void setBorder(int border) { this.border = border; } /** * @param border 边框宽度 * @return this */ public Table border(int border) { this.border = border; return this; } /** * @param tr 标题行 */ public void head(Tr tr) { this.thead.add(tr); } /** * @param color 背景颜色值 * @return this */ public Table headBackgroundColor(String color) { this.headBackgroundColor = color; return this; } /** * @return html代码 */ @Override public String html() { StringBuilder sb = new StringBuilder(); sb.append("\n"); if (this.title != null) { sb.append(""); sb.append(this.title); sb.append(""); } if (thead.size() > 0) { StringBuilder headSB = new StringBuilder(); for (Tr tr : thead) { if (headBackgroundColor != null) { tr.addStyle("background-color", headBackgroundColor); } headSB.append(tr.html()); } String head = headSB.toString(); head = head.replace("", ""); sb.append("\n" + head + "\n"); } sb.append("\n"); int tbodySize = tbody.size(); if (tbodySize > 0) { Tr tr; for (int i = 0; i < tbodySize; i++) { tr = tbody.get(i); if (i % 2 == 0) { // 奇数行 if (oddColor != null) tr.addStyle("background-color", oddColor); } else { // 偶数行 if (evenColor != null) tr.addStyle("background-color", evenColor); } sb.append(tr.html()); } } sb.append("\n"); sb.append(""); return sb.toString(); } /** * @return html代码 */ @Override public String toString() { return html(); } /** * */ @Override public void clearStyle() { this.border = null; this.oddColor = null; this.evenColor = null; this.headBackgroundColor = null; super.clearStyle(); } @Override public void clearElement() { this.thead.clear(); this.tbody.clear(); } /** * @param key css样式key * @param val css样式值 * @return this */ @Override public Table style(String key, String val) { this.styleMap.put(key, val); return this; } /** * @return 返回所有table行对象list */ public List tr() { List trs = new ArrayList<>(); trs.addAll(thead); trs.addAll(tbody); return trs; } /** * @return 表格中所有文本的内容 */ @Override public String text() { StringBuilder sb = new StringBuilder(); for (Tr tr : thead) { sb.append(tr.text()); } for (Tr tr : tbody) { sb.append(tr.text()); } return sb.toString(); } /** * @return 返回table的所有tr数量 */ public int size() { return thead.size() + tbody.size(); } /** * @return 返回tbody的tr数量 */ public int bodySize() { return tbody.size(); } /** * @param title 标题 * @return this */ public Table title(String title) { this.title = title; return this; } /** * @return 标题 */ public String title() { return this.title; } /** * @return 返回table的列数 */ public int colSize() { Tr tr; int colSize = 0; if (thead.size() > 0) { tr = thead.get(0); } else if (tbody.size() > 0) { tr = tbody.get(0); } else { return colSize; } for (Td td : tr.allTds()) { Integer colspan = td.colspan(); colSize += (colspan == null ? 1 : colspan.intValue()); } return colSize; } /** * 替换指定index的tr元素 * * @param index tr的下表,从0开始 * @param newTr 新行 * @return 是否替换成功 */ public boolean replace(int index, Object newTr) { try { this.tbody.remove(index); } catch (Exception e) { return false; } return insert(index, newTr); } /** * 插入新的行到指定index * * @param index 位置 * @param newTr 新行 * @return 是否插入成功 */ public boolean insert(int index, Object newTr) { try { if (newTr instanceof Tr) { this.tbody.add(index, (Tr) newTr); } else { this.tbody.add(index, new Tr(newTr)); } } catch (Exception e) { return false; } return true; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy