home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 March / pcp161a.iso / handson / files / copyjava.exe / com / sun / java / swing / DefaultFocusManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-02-26  |  4.4 KB  |  241 lines

  1. package com.sun.java.swing;
  2.  
  3. import java.awt.AWTEvent;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dialog;
  7. import java.awt.Rectangle;
  8. import java.awt.Window;
  9. import java.awt.event.InputEvent;
  10. import java.awt.event.KeyEvent;
  11. import java.util.Vector;
  12.  
  13. public class DefaultFocusManager extends FocusManager {
  14.    public void processKeyEvent(Component var1, KeyEvent var2) {
  15.       if (var2.getKeyCode() == 9 || var2.getKeyChar() == '\t') {
  16.          if (var1 instanceof JComponent) {
  17.             JComponent var3 = (JComponent)var1;
  18.             if (var3.isManagingFocus() && (((InputEvent)var2).getModifiers() & 2) != 2) {
  19.                return;
  20.             }
  21.          }
  22.  
  23.          if (((AWTEvent)var2).getID() != 401) {
  24.             ((InputEvent)var2).consume();
  25.             return;
  26.          }
  27.  
  28.          if ((((InputEvent)var2).getModifiers() & 1) == 1) {
  29.             this.focusPreviousComponent(var1);
  30.          } else {
  31.             this.focusNextComponent(var1);
  32.          }
  33.  
  34.          ((InputEvent)var2).consume();
  35.       }
  36.  
  37.    }
  38.  
  39.    public void focusNextComponent(Component var1) {
  40.       if (var1 instanceof JComponent) {
  41.          JComponent var2 = (JComponent)var1;
  42.          Container var4 = this.getFocusRoot(var2);
  43.          if (var4 != null) {
  44.             Component var3 = this.getFocusableComponentAfter(var2, var4, true);
  45.             if (var3 != null) {
  46.                if (var3 instanceof JComponent) {
  47.                   ((JComponent)var3).grabFocus();
  48.                   return;
  49.                }
  50.  
  51.                var3.requestFocus();
  52.             }
  53.          }
  54.       }
  55.  
  56.    }
  57.  
  58.    public void focusPreviousComponent(Component var1) {
  59.       if (var1 instanceof JComponent) {
  60.          JComponent var2 = (JComponent)var1;
  61.          Container var4 = this.getFocusRoot(var2);
  62.          if (var4 != null) {
  63.             Component var3 = this.getFocusableComponentAfter(var2, var4, false);
  64.             if (var3 != null) {
  65.                if (var3 instanceof JComponent) {
  66.                   ((JComponent)var3).grabFocus();
  67.                   return;
  68.                }
  69.  
  70.                var3.requestFocus();
  71.             }
  72.          }
  73.       }
  74.  
  75.    }
  76.  
  77.    Container getFocusRoot(Component var1) {
  78.       for(Container var2 = var1.getParent(); var2 != null; var2 = ((Component)var2).getParent()) {
  79.          if (var2 instanceof JComponent && ((JComponent)var2).isFocusCycleRoot() || var2 instanceof Window || var2 instanceof Dialog) {
  80.             return var2;
  81.          }
  82.       }
  83.  
  84.       return null;
  85.    }
  86.  
  87.    private Component getFocusableComponentAfter(Component var1, Container var2, boolean var3) {
  88.       Component var5 = var1;
  89.       Component var4 = var1;
  90.  
  91.       do {
  92.          if (var3) {
  93.             var4 = this.getNextComponent(var4, var2, true);
  94.          } else {
  95.             var4 = this.getPreviousComponent(var4, var2);
  96.          }
  97.       } while(var4 != null && var4 != var5 && (!var4.isFocusTraversable() || !var4.isEnabled()));
  98.  
  99.       return var4;
  100.    }
  101.  
  102.    private Component getNextComponent(Component var1, Container var2, boolean var3) {
  103.       Object var4 = null;
  104.       if (var3 && (var1 instanceof JComponent && !((JComponent)var1).isManagingFocus() || !(var1 instanceof JComponent)) && var1 instanceof Container && ((Container)var1).getComponentCount() > 0) {
  105.          return this.getFirstComponent((Container)var1);
  106.       } else {
  107.          Container var5 = var1.getParent();
  108.          Component var6 = this.getComponentAfter(var5, var1);
  109.          if (var6 != null) {
  110.             return var6;
  111.          } else {
  112.             return (Component)(var5 == var2 ? var2 : this.getNextComponent(var5, var2, false));
  113.          }
  114.       }
  115.    }
  116.  
  117.    private Component getPreviousComponent(Component var1, Container var2) {
  118.       Container var3 = var1.getParent();
  119.       if (var1 == var2) {
  120.          return this.getDeepestLastComponent(var2);
  121.       } else {
  122.          Component var4 = this.getComponentBefore(var3, var1);
  123.          return (Component)(var4 != null ? this.getDeepestLastComponent(var4) : var3);
  124.       }
  125.    }
  126.  
  127.    private Component getDeepestLastComponent(Component var1) {
  128.       return (var1 instanceof JComponent && !((JComponent)var1).isManagingFocus() || !(var1 instanceof JComponent)) && var1 instanceof Container && ((Container)var1).getComponentCount() > 0 ? this.getDeepestLastComponent(this.getLastComponent((Container)var1)) : var1;
  129.    }
  130.  
  131.    public Component getFirstComponent(Container var1) {
  132.       Component[] var2 = this.childrenTabOrder(var1);
  133.       return var2.length > 0 ? var2[0] : null;
  134.    }
  135.  
  136.    public Component getLastComponent(Container var1) {
  137.       Component[] var2 = this.childrenTabOrder(var1);
  138.       return var2.length > 0 ? var2[var2.length - 1] : null;
  139.    }
  140.  
  141.    public Component getComponentBefore(Container var1, Component var2) {
  142.       Component[] var3 = this.childrenTabOrder(var1);
  143.       int var4 = 1;
  144.  
  145.       for(int var5 = var3.length; var4 < var5; ++var4) {
  146.          if (var3[var4] == var2) {
  147.             return var3[var4 - 1];
  148.          }
  149.       }
  150.  
  151.       return null;
  152.    }
  153.  
  154.    public Component getComponentAfter(Container var1, Component var2) {
  155.       Component[] var3 = this.childrenTabOrder(var1);
  156.       int var4 = 0;
  157.  
  158.       for(int var5 = var3.length - 1; var4 < var5; ++var4) {
  159.          if (var3[var4] == var2) {
  160.             return var3[var4 + 1];
  161.          }
  162.       }
  163.  
  164.       return null;
  165.    }
  166.  
  167.    public boolean compareTabOrder(Component var1, Component var2) {
  168.       int var4;
  169.       int var6;
  170.       if (var1 instanceof JComponent) {
  171.          var4 = ((JComponent)var1).getY();
  172.          var6 = ((JComponent)var1).getX();
  173.       } else {
  174.          Rectangle var3 = var1.getBounds();
  175.          var4 = var3.y;
  176.          var6 = var3.x;
  177.       }
  178.  
  179.       int var5;
  180.       int var7;
  181.       if (var2 instanceof JComponent) {
  182.          var5 = ((JComponent)var2).getY();
  183.          var7 = ((JComponent)var2).getX();
  184.       } else {
  185.          Rectangle var8 = var2.getBounds();
  186.          var5 = var8.y;
  187.          var7 = var8.x;
  188.       }
  189.  
  190.       if (Math.abs(var4 - var5) < 10) {
  191.          return var6 < var7;
  192.       } else {
  193.          return var4 < var5;
  194.       }
  195.    }
  196.  
  197.    Component[] childrenTabOrder(Container var1) {
  198.       Component[] var2 = var1.getComponents();
  199.       boolean var7 = false;
  200.       int var4 = 0;
  201.  
  202.       int var6;
  203.       for(var6 = var2.length; var4 < var6; ++var4) {
  204.          if (!var7 && var2[var4] instanceof JComponent && ((JComponent)var2[var4]).getNextFocusableComponent() != null) {
  205.             var7 = true;
  206.          }
  207.  
  208.          for(int var5 = var4; var5 < var6; ++var5) {
  209.             if (var4 != var5 && this.compareTabOrder(var2[var5], var2[var4])) {
  210.                Component var3 = var2[var4];
  211.                var2[var4] = var2[var5];
  212.                var2[var5] = var3;
  213.             }
  214.          }
  215.       }
  216.  
  217.       if (var7) {
  218.          Vector var10 = new Vector(var6);
  219.  
  220.          for(int var11 = 0; var11 < var6; ++var11) {
  221.             var10.addElement(var2[var11]);
  222.          }
  223.  
  224.          for(int var12 = 0; var12 < var6; ++var12) {
  225.             int var8;
  226.             Component var9;
  227.             if (var2[var12] instanceof JComponent && (var9 = ((JComponent)var2[var12]).getNextFocusableComponent()) != null && (var8 = var10.indexOf(var9)) != -1) {
  228.                var10.removeElementAt(var8);
  229.                var10.insertElementAt(var9, var12 + 1);
  230.             }
  231.          }
  232.  
  233.          for(int var13 = 0; var13 < var6; ++var13) {
  234.             var2[var13] = (Component)var10.elementAt(var13);
  235.          }
  236.       }
  237.  
  238.       return var2;
  239.    }
  240. }
  241.