001 package org.springframework.richclient.components;
002
003 import javax.swing.*;
004 import javax.swing.text.JTextComponent;
005 import java.util.List;
006 import java.awt.*;
007
008 /**
009 * Traversal policy designed to skip certain components
010 */
011 public class SkipComponentsFocusTraversalPolicy extends LayoutFocusTraversalPolicy
012 {
013 List<JComponent> componentsToSkip;
014
015 public static final SkipComponentsFocusTraversalPolicy skipJTextComponentTraversalPolicy = new SkipComponentsFocusTraversalPolicy();
016
017 public SkipComponentsFocusTraversalPolicy()
018 {}
019
020 public SkipComponentsFocusTraversalPolicy(List<JComponent> componentsToSkip)
021 {
022 this.componentsToSkip = componentsToSkip;
023 }
024
025 @Override
026 protected boolean accept(Component aComponent)
027 {
028 if( !super.accept(aComponent))
029 return false;
030
031 if (aComponent instanceof JTextComponent && ((JTextComponent)aComponent).isEditable() == false)
032 return false;
033
034 if (componentsToSkip != null)
035 {
036 for (JComponent component : componentsToSkip)
037 {
038 if (component == aComponent || component.isAncestorOf(aComponent))
039 return false;
040 }
041 }
042 return true;
043 }
044 }