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 }