64 65 @Override 66 public void initialize() { 67 super.initialize(); 68 synchronized (getDelegateLock()) { 69 // This listener should be added before setText(). 70 getTextComponent().getDocument().addDocumentListener(this); 71 } 72 setEditable(getTarget().isEditable()); 73 setText(getTarget().getText()); 74 getTarget().addInputMethodListener(this); 75 final int start = getTarget().getSelectionStart(); 76 final int end = getTarget().getSelectionEnd(); 77 if (end > start) { 78 select(start, end); 79 } 80 setCaretPosition(getTarget().getCaretPosition()); 81 firstChangeSkipped = true; 82 } 83 84 abstract JTextComponent getTextComponent(); 85 86 public Dimension getPreferredSize(final int rows, final int columns) { 87 final Insets insets; 88 synchronized (getDelegateLock()) { 89 insets = getDelegate().getInsets(); 90 } 91 final int borderHeight = insets.top + insets.bottom; 92 final int borderWidth = insets.left + insets.right; 93 final FontMetrics fm = getFontMetrics(getFont()); 94 final int charWidth = (fm != null) ? fm.charWidth(WIDE_CHAR) : 10; 95 final int itemHeight = (fm != null) ? fm.getHeight() : 10; 96 return new Dimension(columns * charWidth + borderWidth, 97 rows * itemHeight + borderHeight); 98 } 99 100 @Override 101 public final void setEditable(final boolean editable) { 102 synchronized (getDelegateLock()) { 103 getTextComponent().setEditable(editable); | 64 65 @Override 66 public void initialize() { 67 super.initialize(); 68 synchronized (getDelegateLock()) { 69 // This listener should be added before setText(). 70 getTextComponent().getDocument().addDocumentListener(this); 71 } 72 setEditable(getTarget().isEditable()); 73 setText(getTarget().getText()); 74 getTarget().addInputMethodListener(this); 75 final int start = getTarget().getSelectionStart(); 76 final int end = getTarget().getSelectionEnd(); 77 if (end > start) { 78 select(start, end); 79 } 80 setCaretPosition(getTarget().getCaretPosition()); 81 firstChangeSkipped = true; 82 } 83 84 @Override 85 protected final void disposeImpl() { 86 synchronized (getDelegateLock()) { 87 // visible caret has a timer thread which must be stopped 88 getTextComponent().getCaret().setVisible(false); 89 } 90 super.disposeImpl(); 91 } 92 93 /** 94 * This method should be called under getDelegateLock(). 95 */ 96 abstract JTextComponent getTextComponent(); 97 98 public Dimension getPreferredSize(final int rows, final int columns) { 99 final Insets insets; 100 synchronized (getDelegateLock()) { 101 insets = getDelegate().getInsets(); 102 } 103 final int borderHeight = insets.top + insets.bottom; 104 final int borderWidth = insets.left + insets.right; 105 final FontMetrics fm = getFontMetrics(getFont()); 106 final int charWidth = (fm != null) ? fm.charWidth(WIDE_CHAR) : 10; 107 final int itemHeight = (fm != null) ? fm.getHeight() : 10; 108 return new Dimension(columns * charWidth + borderWidth, 109 rows * itemHeight + borderHeight); 110 } 111 112 @Override 113 public final void setEditable(final boolean editable) { 114 synchronized (getDelegateLock()) { 115 getTextComponent().setEditable(editable); |