1 package org.kuali.student.common.ui.client.widgets.table.scroll; 2 3 import com.google.gwt.event.dom.client.BlurEvent; 4 import com.google.gwt.event.dom.client.BlurHandler; 5 import com.google.gwt.event.dom.client.ChangeEvent; 6 import com.google.gwt.event.dom.client.ChangeHandler; 7 import com.google.gwt.event.dom.client.ClickEvent; 8 import com.google.gwt.event.dom.client.ClickHandler; 9 import com.google.gwt.event.dom.client.HasChangeHandlers; 10 import com.google.gwt.event.dom.client.HasClickHandlers; 11 import com.google.gwt.event.shared.HandlerRegistration; 12 import com.google.gwt.user.client.ui.HasText; 13 import com.google.gwt.user.client.ui.Label; 14 import com.google.gwt.user.client.ui.SimplePanel; 15 import com.google.gwt.user.client.ui.TextBox; 16 17 public class EditableLabel extends SimplePanel implements HasClickHandlers, HasText, HasChangeHandlers { 18 Label label = new Label(); 19 TextBox textBox = new TextBox(); 20 21 public EditableLabel() { 22 super.setWidget(label); 23 textBox.addChangeHandler(new ChangeHandler() { 24 @Override 25 public void onChange(ChangeEvent event) { 26 label.setText(textBox.getText()); 27 } 28 }); 29 textBox.addClickHandler(new ClickHandler(){ 30 @Override 31 public void onClick(ClickEvent event) { 32 event.stopPropagation(); 33 } 34 35 }); 36 textBox.addBlurHandler(new BlurHandler() { 37 @Override 38 public void onBlur(BlurEvent event) { 39 label.setText(textBox.getText()); 40 EditableLabel.this.setWidget(label); 41 42 } 43 }); 44 label.addClickHandler(new ClickHandler() { 45 @Override 46 public void onClick(ClickEvent event) { 47 textBox.setText(label.getText()); 48 int width = label.getOffsetWidth(); 49 int height = label.getOffsetHeight()+3; 50 EditableLabel.this.setWidget(textBox); 51 textBox.setWidth(""+width+"px"); 52 textBox.setHeight(""+height+"px"); 53 textBox.selectAll(); 54 textBox.setFocus(true); 55 } 56 }); 57 } 58 59 @Override 60 public String getText() { 61 return label.getText(); 62 63 } 64 65 @Override 66 public void setText(String text) { 67 label.setText(text); 68 } 69 70 @Override 71 public HandlerRegistration addChangeHandler(ChangeHandler handler) { 72 return textBox.addChangeHandler(handler); 73 } 74 75 @Override 76 public HandlerRegistration addClickHandler(ClickHandler handler) { 77 return label.addClickHandler(handler); 78 } 79 }