1 package com.swtdesigner;
2
3 import java.awt.Component;
4 import java.awt.Container;
5 import java.awt.FocusTraversalPolicy;
6
7
8
9
10
11
12
13
14
15 public class FocusTraversalOnArray extends FocusTraversalPolicy {
16 private final Component m_Components[];
17
18
19
20
21
22
23 public FocusTraversalOnArray(Component components[]) {
24 m_Components = components;
25 }
26
27
28
29
30
31
32 private int indexCycle(int index, int delta) {
33 int size = m_Components.length;
34 int next = (index + delta + size) % size;
35 return next;
36 }
37
38 private Component cycle(Component currentComponent, int delta) {
39 int index = -1;
40 loop: for (int i = 0; i < m_Components.length; i++) {
41 Component component = m_Components[i];
42 for (Component c = currentComponent; c != null; c = c.getParent()) {
43 if (component == c) {
44 index = i;
45 break loop;
46 }
47 }
48 }
49
50 int initialIndex = index;
51 while (true) {
52 int newIndex = indexCycle(index, delta);
53 if (newIndex == initialIndex) {
54 break;
55 }
56 index = newIndex;
57
58 Component component = m_Components[newIndex];
59 if (component.isEnabled()) {
60 return component;
61 }
62 }
63
64 return currentComponent;
65 }
66
67
68
69
70
71
72 public Component getComponentAfter(Container container, Component component) {
73 return cycle(component, 1);
74 }
75
76 public Component getComponentBefore(Container container, Component component) {
77 return cycle(component, -1);
78 }
79
80 public Component firstComponent(Container container) {
81 return m_Components[0];
82 }
83
84 public Component getLastComponent(Container container) {
85 return m_Components[m_Components.length - 1];
86 }
87
88 public Component getDefaultComponent(Container container) {
89 return firstComponent(container);
90 }
91
92 @Override
93 public Component getFirstComponent(Container aContainer) {
94 return firstComponent(aContainer);
95 }
96 }