You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

EditableModeChange.java 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package com.vaadin.tests.components.table;
  2. import java.text.DateFormat;
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. import java.util.Locale;
  6. import com.vaadin.server.VaadinRequest;
  7. import com.vaadin.tests.components.AbstractReindeerTestUI;
  8. import com.vaadin.ui.Component;
  9. import com.vaadin.v7.data.Container;
  10. import com.vaadin.v7.event.ItemClickEvent;
  11. import com.vaadin.v7.ui.DefaultFieldFactory;
  12. import com.vaadin.v7.ui.Field;
  13. import com.vaadin.v7.ui.Table;
  14. import com.vaadin.v7.ui.TableFieldFactory;
  15. public class EditableModeChange extends AbstractReindeerTestUI {
  16. private ItemClickEvent selectionEvent;
  17. private final String[] names = { "Teemu", "Teppo", "Seppo", "Matti",
  18. "Pekka" };
  19. @SuppressWarnings("unchecked")
  20. @Override
  21. public void setup(VaadinRequest request) {
  22. final Table items = new Table("Items - double-click to edit");
  23. items.setSelectable(true);
  24. items.addContainerProperty("name", String.class, "");
  25. items.addContainerProperty("birthday", Date.class, "");
  26. final TableFieldFactory fieldFactory = new ItemFieldFactory();
  27. items.setTableFieldFactory(fieldFactory);
  28. Calendar cal = Calendar.getInstance();
  29. cal.set(2010, 7, 12, 12, 7, 54);
  30. for (String name : names) {
  31. items.addItem(name);
  32. items.getItem(name).getItemProperty("name").setValue(name);
  33. items.getItem(name).getItemProperty("birthday")
  34. .setValue(new FormattedDate(cal.getTime().getTime()));
  35. }
  36. items.addItemClickListener(event -> {
  37. if (event.isDoubleClick()) {
  38. selectionEvent = event;
  39. items.setEditable(true);
  40. } else if (items.isEditable()) {
  41. items.setEditable(false);
  42. }
  43. });
  44. addComponent(items);
  45. }
  46. private class FormattedDate extends Date {
  47. private DateFormat formatter = DateFormat.getDateTimeInstance(
  48. DateFormat.MEDIUM, DateFormat.MEDIUM, new Locale("en", "US"));
  49. public FormattedDate(long time) {
  50. super(time);
  51. }
  52. @Override
  53. public String toString() {
  54. return formatter.format(this);
  55. }
  56. }
  57. private class ItemFieldFactory extends DefaultFieldFactory {
  58. @Override
  59. public Field<?> createField(Container container, Object itemId,
  60. Object propertyId, Component uiContext) {
  61. if (selectionEvent != null) {
  62. if ((selectionEvent.getItemId().equals(itemId))
  63. && (selectionEvent.getPropertyId()
  64. .equals(propertyId))) {
  65. return super.createField(container, itemId, propertyId,
  66. uiContext);
  67. }
  68. }
  69. return null;
  70. }
  71. }
  72. @Override
  73. protected String getTestDescription() {
  74. return "Double click a cell to edit, then click on another row to select it (editmode is set to false). The clicked row should now be selected without any flickering.";
  75. }
  76. @Override
  77. protected Integer getTicketNumber() {
  78. return 5427;
  79. }
  80. }