keyboardfocusmanager.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 557 行 · 第 1/2 页

JAVA
557
字号
  {
    // XXX Should this send focus events to the windows involved?
    firePropertyChange("activeWindow", activeWindow, window);
    try
      {
        fireVetoableChange("activeWindow", activeWindow, window);
        activeWindow = window;
      }
    catch (PropertyVetoException e)
      {
      }
  }

  public FocusTraversalPolicy getDefaultFocusTraversalPolicy()
  {
    if (defaultPolicy == null)
      defaultPolicy = new DefaultFocusTraversalPolicy();
    return defaultPolicy;
  }

  public void setDefaultFocusTraversalPolicy(FocusTraversalPolicy policy)
  {
    if (policy == null)
      throw new IllegalArgumentException();
    firePropertyChange("defaultFocusTraversalPolicy", defaultPolicy, policy);
    defaultPolicy = policy;
  }

  public void setDefaultFocusTraversalKeys(int id, Set keystrokes)
  {
    if (keystrokes == null)
      throw new IllegalArgumentException();
    Set sa;
    Set sb;
    Set sc;
    String type;
    switch (id)
      {
      case FORWARD_TRAVERSAL_KEYS:
        sa = defaultFocusKeys[BACKWARD_TRAVERSAL_KEYS];
        sb = defaultFocusKeys[UP_CYCLE_TRAVERSAL_KEYS];
        sc = defaultFocusKeys[DOWN_CYCLE_TRAVERSAL_KEYS];
        type = "forwardDefaultFocusTraversalKeys";
        break;
      case BACKWARD_TRAVERSAL_KEYS:
        sa = defaultFocusKeys[FORWARD_TRAVERSAL_KEYS];
        sb = defaultFocusKeys[UP_CYCLE_TRAVERSAL_KEYS];
        sc = defaultFocusKeys[DOWN_CYCLE_TRAVERSAL_KEYS];
        type = "backwardDefaultFocusTraversalKeys";
        break;
      case UP_CYCLE_TRAVERSAL_KEYS:
        sa = defaultFocusKeys[FORWARD_TRAVERSAL_KEYS];
        sb = defaultFocusKeys[BACKWARD_TRAVERSAL_KEYS];
        sc = defaultFocusKeys[DOWN_CYCLE_TRAVERSAL_KEYS];
        type = "upCycleDefaultFocusTraversalKeys";
        break;
      case DOWN_CYCLE_TRAVERSAL_KEYS:
        sa = defaultFocusKeys[FORWARD_TRAVERSAL_KEYS];
        sb = defaultFocusKeys[BACKWARD_TRAVERSAL_KEYS];
        sc = defaultFocusKeys[UP_CYCLE_TRAVERSAL_KEYS];
        type = "downCycleDefaultFocusTraversalKeys";
        break;
      default:
        throw new IllegalArgumentException();
      }
    int i = keystrokes.size();
    Iterator iter = keystrokes.iterator();
    while (--i >= 0)
      {
        Object o = iter.next();
        if (! (o instanceof AWTKeyStroke)
            || sa.contains(o) || sb.contains(o) || sc.contains(o)
            || ((AWTKeyStroke) o).keyCode == KeyEvent.VK_UNDEFINED)
          throw new IllegalArgumentException();
      }
    keystrokes = Collections.unmodifiableSet(new HashSet(keystrokes));
    firePropertyChange(type, defaultFocusKeys[id], keystrokes);
    defaultFocusKeys[id] = keystrokes;
  }

  public Set getDefaultFocusTraversalKeys(int id)
  {
    if (id < FORWARD_TRAVERSAL_KEYS || id > DOWN_CYCLE_TRAVERSAL_KEYS)
      throw new IllegalArgumentException();
    return defaultFocusKeys[id];
  }

  public Container getCurrentFocusCycleRoot()
  {
    // XXX Need an easy way to test if this thread is in the context of the
    // global focus owner, to avoid creating the exception in the first place.
    try
      {
        return getGlobalCurrentFocusCycleRoot();
      }
    catch (SecurityException e)
      {
        return null;
      }
  }

  protected Container getGlobalCurrentFocusCycleRoot()
  {
    // XXX Need a way to test if this thread is in the context of the focus
    // owner, and throw a SecurityException if that is the case.
    // XXX Implement.
    return focusCycleRoot;
  }

  protected void setGlobalCurrentFocusCycleRoot(Container cycleRoot)
  {
    firePropertyChange("currentFocusCycleRoot", focusCycleRoot, cycleRoot);
    focusCycleRoot = cycleRoot;
  }

  public void addPropertyChangeListener(PropertyChangeListener l)
  {
    if (l != null)
      propertyChangeSupport.addPropertyChangeListener(l);
  }

  public void removePropertyChangeListener(PropertyChangeListener l)
  {
    if (l != null)
      propertyChangeSupport.removePropertyChangeListener(l);
  }

  public PropertyChangeListener[] getPropertyChangeListeners()
  {
    return propertyChangeSupport.getPropertyChangeListeners();
  }

  public void addPropertyChangeListener(String name, PropertyChangeListener l)
  {
    if (l != null)
      propertyChangeSupport.addPropertyChangeListener(name, l);
  }

  public void removePropertyChangeListener(String name,
                                           PropertyChangeListener l)
  {
    if (l != null)
      propertyChangeSupport.removePropertyChangeListener(name, l);
  }

  public PropertyChangeListener[] getPropertyChangeListeners(String name)
  {
    return propertyChangeSupport.getPropertyChangeListeners(name);
  }

  protected void firePropertyChange(String name, Object o, Object n)
  {
    propertyChangeSupport.firePropertyChange(name, o, n);
  }

  public void addVetoableChangeListener(VetoableChangeListener l)
  {
    if (l != null)
      vetoableChangeSupport.addVetoableChangeListener(l);
  }

  public void removeVetoableChangeListener(VetoableChangeListener l)
  {
    if (l != null)
      vetoableChangeSupport.removeVetoableChangeListener(l);
  }

  public VetoableChangeListener[] getVetoableChangeListeners()
  {
    return vetoableChangeSupport.getVetoableChangeListeners();
  }

  public void addVetoableChangeListener(String name, VetoableChangeListener l)
  {
    if (l != null)
      vetoableChangeSupport.addVetoableChangeListener(name, l);
  }

  public void removeVetoableChangeListener(String name,
                                           VetoableChangeListener l)
  {
    if (l != null)
      vetoableChangeSupport.removeVetoableChangeListener(name, l);
  }

  public VetoableChangeListener[] getVetoableChangeListeners(String name)
  {
    return vetoableChangeSupport.getVetoableChangeListeners(name);
  }

  protected void fireVetoableChange(String name, Object o, Object n)
    throws PropertyVetoException
  {
    vetoableChangeSupport.fireVetoableChange(name, o, n);
  }

  public void addKeyEventDispatcher(KeyEventDispatcher dispatcher)
  {
    if (dispatcher != null)
      keyEventDispatchers.add(dispatcher);
  }

  public void removeKeyEventDispatcher(KeyEventDispatcher dispatcher)
  {
    keyEventDispatchers.remove(dispatcher);
  }

  protected List getKeyEventDispatchers()
  {
    return (List) keyEventDispatchers.clone();
  }

  public void addKeyEventPostProcessor(KeyEventPostProcessor postProcessor)
  {
    if (postProcessor != null)
      keyEventPostProcessors.add(postProcessor);
  }

  public void removeKeyEventPostProcessor(KeyEventPostProcessor postProcessor)
  {
    keyEventPostProcessors.remove(postProcessor);
  }

  protected List getKeyEventPostProcessors()
  {
    return (List) keyEventPostProcessors.clone();
  }

  public abstract boolean dispatchEvent(AWTEvent e);

  public final void redispatchEvent(Component target, AWTEvent e)
  {
    throw new Error("not implemented");
  }

  public abstract boolean dispatchKeyEvent(KeyEvent e);

  public abstract boolean postProcessKeyEvent(KeyEvent e);

  public abstract void processKeyEvent(Component focused, KeyEvent e);

  protected abstract void enqueueKeyEvents(long after, Component untilFocused);

  protected abstract void dequeueKeyEvents(long after, Component untilFocused);

  protected abstract void discardKeyEvents(Component comp);

  public abstract void focusNextComponent(Component comp);

  public abstract void focusPreviousComponent(Component comp);

  public abstract void upFocusCycle(Component comp);

  public abstract void downFocusCycle(Container cont);

  public final void focusNextComponent()
  {
    focusNextComponent(focusOwner);
  }

  public final void focusPreviousComponent()
  {
    focusPreviousComponent(focusOwner);
  }

  public final void upFocusCycle()
  {
    upFocusCycle(focusOwner);
  }

  public final void downFocusCycle()
  {
    if (focusOwner instanceof Container
        && ((Container) focusOwner).isFocusCycleRoot())
      downFocusCycle((Container) focusOwner);
  }
} // class KeyboardFocusManager

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?