如何通过点击按钮突出显示不同颜色的新添加的行到Vaadin表?

时间:2018-04-02 12:25:45

标签: vaadin

我是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;
}

}

输出上述代码:

enter image description here

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用https://vaadin.com/api/7.7.13/com/vaadin/ui/Table.CellStyleGenerator.html为突出显示定义条件样式名称。有几种选择。如果您的项目具有更新时设置的日期属性,则可以与该日期进行比较,并突出显示在特定时间范围内添加的行,以指示这些是新的。或者,您可以在添加后更新计时器流程。