我是Vaadin的新手。如何通过点击按钮突出显示不同颜色的新添加的行到Vaadin表?下面是工作代码,它是在点击添加按钮时向vaadin表添加新行,但不是以不同颜色突出显示。在这里,我使用DefaultFieldFactory为每一行生成字段。
public class ReviewTimesheetTable extends ViewComponent {
private Map<ReviewTimesheetTableDto, HashMap<String, AbstractField<?>>>
tableItem = new HashMap<ReviewTimesheetTableDto, HashMap<String,
AbstractField<?>>>();
BeanItemContainer<ReviewTimesheetTableDto> data = new
BeanItemContainer<ReviewTimesheetTableDto>(
ReviewTimesheetTableDto.class);
private Table table;
private Button btnAdd;
public void init() {
btnAdd = new Button();
btnAdd.setStyleName("link");
btnAdd.setIcon(new ThemeResource("images/addbtn.png"));
btnAdd.setDescription("Add Additional Task");
VerticalLayout layout = new VerticalLayout();
// Create a data source and bind it to a table
table = new Table("", data);
table.addStyleName("generateColumnTable");
table.setWidth("100%");
table.setPageLength(table.getItemIds().size());
table.setVisibleColumns(new Object[] { "chkBox", "taskDate", "employeeId", "taskId", "crJiraId",
"taskDesc","hour","minute"/*, "Delete" */});
table.setColumnHeader("chkBox", "Select");
table.setColumnHeader("taskDate", "Task Date");
table.setColumnHeader("employeeId", "Employee ID");
table.setColumnHeader("taskId", "Task ID");
table.setColumnHeader("crJiraId", "Subtask ID");
table.setColumnHeader("taskDesc", "Task Description");
table.setColumnHeader("hour", "Hour");
table.setColumnHeader("minute", "Minute");
table.setEditable(true);
table.setTableFieldFactory(new ImmediateFieldFactory());
table.setWidth("200%");
table.setPageLength(table.getItemIds().size());
HorizontalLayout btnLayout = new HorizontalLayout(table, btnAdd);
btnLayout.setWidth("100%");
btnLayout.setComponentAlignment(btnAdd, Alignment.TOP_RIGHT);
addListener();
layout.setMargin(true);
setCompositionRoot(btnLayout);
}
private void addListener() {
btnAdd.addClickListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
ReviewTimesheetTableDto tableDTO = new ReviewTimesheetTableDto(createdBy);
BeanItem<ReviewTimesheetTableDto> addItem = data.addItemAt(0,tableDTO);
}
});
}
public class ImmediateFieldFactory extends DefaultFieldFactory {
@Override
public Field<?> createField(Container container, Object itemId,
Object propertyId, Component uiContext) {
final ReviewTimesheetTableDto timesheetDetail = (ReviewTimesheetTableDto) itemId;
Map<String, AbstractField<?>> tableRow = null;
if(tableItem.get(timesheetDetail) == null)
{
tableItem.put(timesheetDetail,
new HashMap<String, AbstractField<?>>());
}
tableRow = tableItem.get(timesheetDetail);
if ("taskId".equals(propertyId)) {
GComboBox box = new GComboBox();
tableRow.put("taskId", box);
setTaskValues(box, timesheetDetail);
//addTaskListener(box);
box.setData(timesheetDetail);
if(timesheetDetail != null && timesheetDetail.getTaskId() != null) {
box.setDescription(timesheetDetail.getTaskId().getValue());
}
if(isSubmit){
box.setReadOnly(true);
}
if(timesheetDetail.getIsAdd() != null && timesheetDetail.getIsAdd()){
box.setReadOnly(false);
}
return box;
}else if ("crJiraId".equals(propertyId)) {
TextField field = new TextField();
field.setEnabled(true);
field.setWidth("200px");
field.setNullRepresentation("");
if(isSubmit){
field.setReadOnly(true);
}
if(timesheetDetail.getIsAdd() != null && timesheetDetail.getIsAdd()){
field.setReadOnly(false);
}
field.setMaxLength(50);
field.setDescription(timesheetDetail.getCrJiraId());
tableRow.put("crJiraId", field);
return field;
}else if ("taskDesc".equals(propertyId)) {
TextField field = new TextField();
field.setEnabled(true);
field.setWidth("300px");
field.setNullRepresentation("");
field.setReadOnly(false);
tableRow.put("taskDesc", field);
field.setMaxLength(2000);
field.setData(timesheetDetail);
addDetailPopupForTaskDesc(field, null);
if(timesheetDetail.getTaskDesc() != null){
field.setDescription(timesheetDetail.getTaskDesc());
}
field.setReadOnly(true);
if(timesheetDetail.getIsAdd() != null && timesheetDetail.getIsAdd()){
field.setReadOnly(false);
}
return field;
}else if ("hour".equals(propertyId)) {
GComboBox box = new GComboBox();
box.setWidth("60px");
tableRow.put("hour", box);
box.addValueChangeListener(addHourListener(box));
setHourValues(box, timesheetDetail);
box.setData(timesheetDetail);
if(isSubmit){
box.setReadOnly(true);
}
if(timesheetDetail.getIsAdd() != null && timesheetDetail.getIsAdd()){
box.setReadOnly(false);
}
return box;
}else if ("minute".equals(propertyId)) {
GComboBox box = new GComboBox();
box.setWidth("80px");
tableRow.put("minute", box);
box.addValueChangeListener(addMinuteListener(box));
setMinuteValues(box, timesheetDetail);
box.setData(timesheetDetail);
if(isSubmit){
box.setReadOnly(true);
}
if(timesheetDetail.getIsAdd() != null && timesheetDetail.getIsAdd()){
box.setReadOnly(false);
}
return box;
}else if ("employeeId".equals(propertyId)) {
/*TextField field = new TextField();
field.setEnabled(true);
field.setWidth("100%");
field.setNullRepresentation("");
field.setReadOnly(true);
field.setMaxLength(50);
field.setDescription(timesheetDetail.getEmpId());
tableRow.put("empId", field);
return field;*/
GComboBox box = new GComboBox();
tableRow.put("employeeId", box);
setEmpValues(box, timesheetDetail);
box.setData(timesheetDetail);
if(timesheetDetail != null && timesheetDetail.getEmployeeId() != null) {
box.setDescription(timesheetDetail.getEmployeeId().getValue());
}
if(isSubmit){
box.setReadOnly(true);
}
if(timesheetDetail.getIsAdd() != null && timesheetDetail.getIsAdd()){
box.setReadOnly(false);
}
/*if(timesheetDetail.getIsAdd() != null && timesheetDetail.getIsAdd()){
box.setReadOnly(false);
}*/
return box;
}else if ("taskDate".equals(propertyId)) {
DateField field = new DateField();
field.setEnabled(true);
field.setWidth("110px");
field.setReadOnly(true);
if(timesheetDetail.getIsAdd() != null && timesheetDetail.getIsAdd()){
field.setReadOnly(false);
}
field.setDateFormat("dd-MM-yyyy");
tableRow.put("taskDate", field);
return field;
}else if ("chkBox".equals(propertyId)) {
CheckBox field = new CheckBox();
field.setEnabled(true);
field.setWidth("30px");
field.setDescription(SHAConstants.SELECT);
tableRow.put("chkBox", field);
return field;
}else {
Field<?> field = super.createField(container, itemId,
propertyId, uiContext);
if (field instanceof TextField)
field.setWidth("100%");
field.setEnabled(true);
return field;
}
}
}
/*POJO (Bean)*/
import java.io.Serializable;
import java.util.Date;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import com.shaic.arch.fields.dto.SelectValue;
import com.shaic.arch.table.AbstractTableDTO;
import com.vaadin.data.util.BeanItemContainer;
public class ReviewTimesheetTableDto extends AbstractTableDTO implements Serializable {
@NotNull(message = "Please Select Task ID")
private SelectValue taskId;
@NotNull(message = "Please Enter Hours")
private SelectValue hour;
@NotNull(message = "Please Enter Minutes")
private SelectValue minute;
private BeanItemContainer<SelectValue> taskIdList;
private BeanItemContainer<SelectValue> hourList;
private BeanItemContainer<SelectValue> minuteList;
@NotNull(message = "Please Enter Sub Task")
@Size (min =1, message="Please Enter Sub Task")
private String crJiraId;
private String taskDesc;
@NotNull(message = "Please Enter Task Date")
private Date taskDate;
private Long key;
private Long hourValue;
private Long minuteValue;
private String createdBy;
//private String empId;
private Boolean chkBox;
@NotNull(message = "Please Select Employee ID")
private SelectValue employeeId;
public ReviewTimesheetTableDto() {
super();
// TODO Auto-generated constructor stub
}
public ReviewTimesheetTableDto(String createdBy) {
super();
this.createdBy = createdBy;
this.isAdd = Boolean.TRUE;
}
public ReviewTimesheetTableDto(Date taskDate, String userName, String createdBy) {
super();
this.taskDate = taskDate;
this.userName = userName;
this.isAdd = Boolean.TRUE;
this.createdBy = createdBy;
}
private Boolean isSubmit;
private Boolean isAdd;
private String userName;
public SelectValue getTaskId() {
return taskId;
}
public void setTaskId(SelectValue taskId) {
this.taskId = taskId;
}
public BeanItemContainer<SelectValue> getTaskIdList() {
return taskIdList;
}
public void setTaskIdList(BeanItemContainer<SelectValue> taskIdList) {
this.taskIdList = taskIdList;
}
public String getCrJiraId() {
return crJiraId;
}
public void setCrJiraId(String crJiraId) {
this.crJiraId = crJiraId;
}
public String getTaskDesc() {
return taskDesc;
}
public void setTaskDesc(String taskDesc) {
this.taskDesc = taskDesc;
}
public SelectValue getHour() {
return hour;
}
public void setHour(SelectValue hour) {
this.hour = hour;
}
public SelectValue getMinute() {
return minute;
}
public void setMinute(SelectValue minute) {
this.minute = minute;
}
public BeanItemContainer<SelectValue> getHourList() {
return hourList;
}
public void setHourList(BeanItemContainer<SelectValue> hourList) {
this.hourList = hourList;
}
public BeanItemContainer<SelectValue> getMinuteList() {
return minuteList;
}
public void setMinuteList(BeanItemContainer<SelectValue> minuteList) {
this.minuteList = minuteList;
}
public Long getKey() {
return key;
}
public void setKey(Long key) {
this.key = key;
}
public Long getHourValue() {
return hourValue;
}
public void setHourValue(Long hourValue) {
this.hourValue = hourValue;
}
public Long getMinuteValue() {
return minuteValue;
}
public void setMinuteValue(Long minuteValue) {
this.minuteValue = minuteValue;
}
public Boolean getIsSubmit() {
return isSubmit;
}
public void setIsSubmit(Boolean isSubmit) {
this.isSubmit = isSubmit;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Date getTaskDate() {
return taskDate;
}
public void setTaskDate(Date taskDate) {
this.taskDate = taskDate;
}
public Boolean getIsAdd() {
return isAdd;
}
public void setIsAdd(Boolean isAdd) {
this.isAdd = isAdd;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
/*public String getEmpId() {
return empId;
}
public void setEmpId(String empId) {
this.empId = empId;
}*/
public Boolean getChkBox() {
return chkBox;
}
public void setChkBox(Boolean chkBox) {
this.chkBox = chkBox;
}
public SelectValue getEmployeeId() {
return employeeId;
}
public void setEmployeeId(SelectValue employeeId) {
this.employeeId = employeeId;
}
}
输出上述代码:
答案 0 :(得分:1)
最简单的方法是使用https://vaadin.com/api/7.7.13/com/vaadin/ui/Table.CellStyleGenerator.html为突出显示定义条件样式名称。有几种选择。如果您的项目具有更新时设置的日期属性,则可以与该日期进行比较,并突出显示在特定时间范围内添加的行,以指示这些是新的。或者,您可以在添加后更新计时器流程。