diff --git a/swing/src/net/sf/openrocket/gui/adaptors/CustomFocusTraversalPolicy.java b/swing/src/net/sf/openrocket/gui/adaptors/CustomFocusTraversalPolicy.java new file mode 100644 index 000000000..e60df25c3 --- /dev/null +++ b/swing/src/net/sf/openrocket/gui/adaptors/CustomFocusTraversalPolicy.java @@ -0,0 +1,48 @@ +package net.sf.openrocket.gui.adaptors; + +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; +import java.util.LinkedList; +import java.util.List; + +/** + * Custom adapter class for focus traversal, based on a given order of GUI components + * + * @author Sibo Van Gool + */ +public class CustomFocusTraversalPolicy extends FocusTraversalPolicy { + List order; + + /** + * @param order the order of components to traverse + */ + public CustomFocusTraversalPolicy(List order) { + this.order = new LinkedList(order); + } + + public Component getComponentAfter(Container focusCycleRoot, Component aComponent) { + int idx = (order.indexOf(aComponent) + 1) % order.size(); + return order.get(idx); + } + + public Component getComponentBefore(Container focusCycleRoot, Component aComponent) { + int idx = order.indexOf(aComponent) - 1; + if (idx < 0) { + idx = order.size() - 1; + } + return order.get(idx); + } + + public Component getDefaultComponent(Container focusCycleRoot) { + return order.get(0); + } + + public Component getLastComponent(Container focusCycleRoot) { + return order.get(order.size() - 1); + } + + public Component getFirstComponent(Container focusCycleRoot) { + return order.get(0); + } +} diff --git a/swing/src/net/sf/openrocket/gui/components/BasicSlider.java b/swing/src/net/sf/openrocket/gui/components/BasicSlider.java index 6b182a45d..026641768 100644 --- a/swing/src/net/sf/openrocket/gui/components/BasicSlider.java +++ b/swing/src/net/sf/openrocket/gui/components/BasicSlider.java @@ -26,6 +26,7 @@ public class BasicSlider extends JSlider { super(brm); setOrientation(orientation); setInverted(inverted); + setFocusable(false); setUI(new BasicSliderUI(this)); }