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