Every component in Vaadin has the setEnabled(…)-method inherited. But what I haven’t understand yet is why setEnabled(false) seems to behave unexpected on some components.
My concrete problem is to disable a spreadsheet component. Calling the method setEnabled(false) causes the Spreadsheet to be not disabled in the sense of “user cannot interact with component”. The only side effect I recognized is that a programatically change to the spreadsheet cell value leads to “#Value!”.
Here is my code:
public class ApplicationUI extends UI {
private static final long serialVersionUID = 7177458298849973108L;
private Window window;
private Spreadsheet spreadsheet;
@Override
public void init(VaadinRequest request) {
this.setSizeFull();
addWindow(getWindow());
getWindow().center();
getSpreadSheet().setEnabled(false);
}
private void writeHelloToSpreadSheet() {
Workbook workbook = getSpreadSheet().getWorkbook();
final Sheet activeSheet = workbook.getSheetAt(workbook.getActiveSheetIndex());
Cell createCell = activeSheet.createRow(0).createCell(0);
createCell.setCellValue("Hello");
getSpreadSheet().refreshCells(createCell);
}
private Window getWindow() {
if (window == null) {
window = new Window();
window.setCaption("Title");
window.setWidth("500px");
window.setHeight("400px");
window.setContent(createWindowLayout());
}
return window;
}
private VerticalLayout createWindowLayout() {
VerticalLayout verticalLayout = new VerticalLayout(getSpreadSheet(), createButtonWriteHelloToSpreadSheet());
verticalLayout.setSpacing(true);
verticalLayout.setMargin(true);
verticalLayout.setSizeFull();
return verticalLayout;
}
private Button createButtonWriteHelloToSpreadSheet() {
Button buttonHello = new Button("Hello");
buttonHello.addClickListener(new ClickListener() {
private static final long serialVersionUID = 1L;
@Override
public void buttonClick(ClickEvent event) {
writeHelloToSpreadSheet();
}
});
return buttonHello;
}
private Spreadsheet getSpreadSheet() {
if (spreadsheet == null) {
spreadsheet = new Spreadsheet();
spreadsheet.setHeight("100%");
spreadsheet.setSheetSelectionBarVisible(false);
spreadsheet.setFunctionBarVisible(false);
}
return spreadsheet;
}
}