001 /*
002 * Copyright 2002-2007 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005 * use this file except in compliance with the License. You may obtain a copy of
006 * the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013 * License for the specific language governing permissions and limitations under
014 * the License.
015 */
016 package org.springframework.richclient.text;
017
018 import org.springframework.binding.form.FormModel;
019 import org.springframework.richclient.form.builder.FormComponentInterceptor;
020 import org.springframework.richclient.form.builder.FormComponentInterceptorFactory;
021
022 import javax.swing.*;
023 import javax.swing.text.JTextComponent;
024 import java.awt.event.FocusAdapter;
025 import java.awt.event.FocusEvent;
026 import java.awt.event.FocusListener;
027
028 /**
029 * Implements "select all" behaviour for form components. If the form component is a text
030 * field, or a spinner, the contents of the component are selected if it receives focus.
031 *
032 * @author Peter De Bruycker
033 */
034 public class SelectAllFormComponentInterceptorFactory implements FormComponentInterceptorFactory {
035
036 public FormComponentInterceptor getInterceptor( FormModel formModel ) {
037 return new SelectAllFormComponentInterceptor();
038 }
039
040 public class SelectAllFormComponentInterceptor extends TextComponentInterceptor {
041 private FocusListener selector = new FocusAdapter() {
042
043 public void focusGained( FocusEvent e ) {
044 if( !e.isTemporary() ) {
045 final JTextComponent textComponent = (JTextComponent) e.getComponent();
046 // using invokeLater as fix for bug 4740914
047 SwingUtilities.invokeLater( new Runnable() {
048 public void run() {
049 textComponent.selectAll();
050 }
051 } );
052 }
053 }
054
055 @Override
056 public void focusLost(FocusEvent e)
057 {
058 if( !e.isTemporary() ) {
059 final JTextComponent textComponent = (JTextComponent) e.getComponent();
060 SwingUtilities.invokeLater( new Runnable() {
061 public void run() {
062 textComponent.select(0,0);
063 }
064 } );
065 }
066 }
067 };
068
069 protected void processComponent( String propertyName, JTextComponent textComponent ) {
070 textComponent.addFocusListener( selector );
071 }
072 }
073
074 }