加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

java中event原理分析

(2013-04-17 10:15:13)
标签:

js

event

原理

source

javascript

Java中的事件机制的参与者有3种角色:

  1.event object:事件状态对象,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中

  2.event source:具体的事件源,比如说,你点击一个button,那么button就是event source,要想使button对某些事件进行响应,你就需要注册特定的listener。

  3.event listener:具体的对监听的事件类,当它监听到event object产生的时候,它就调用相应的方法,进行处理。


==================================================================================
package java.util;
public abstract interface EventListener
{
}
==================================================================================
package java.awt.event;
import java.util.EventListener;
public abstract interface MouseListener extends EventListener
{
  public abstract void mouseClicked(MouseEvent paramMouseEvent);
  public abstract void mousePressed(MouseEvent paramMouseEvent);
  public abstract void mouseReleased(MouseEvent paramMouseEvent);
  public abstract void mouseEntered(MouseEvent paramMouseEvent);
  public abstract void mouseExited(MouseEvent paramMouseEvent);
}
==================================================================================
package java.awt.event;
import java.util.EventListener;
public abstract interface MouseMotionListener extends EventListener
{
  public abstract void mouseDragged(MouseEvent paramMouseEvent);
  public abstract void mouseMoved(MouseEvent paramMouseEvent);
}
==================================================================================
package java.awt.event;
import java.util.EventListener;
public abstract interface MouseWheelListener extends EventListener
{
  public abstract void mouseWheelMoved(MouseWheelEvent paramMouseWheelEvent);
}
==================================================================================
package java.awt.event;
public abstract class MouseAdapter//适配器模式
  implements MouseListener, MouseWheelListener, MouseMotionListener
{
  public void mouseClicked(MouseEvent paramMouseEvent)
  {
  }
  public void mousePressed(MouseEvent paramMouseEvent)
  {
  }
  public void mouseReleased(MouseEvent paramMouseEvent)
  {
  }
  public void mouseEntered(MouseEvent paramMouseEvent)
  {
  }
  public void mouseExited(MouseEvent paramMouseEvent)
  {
  }
  public void mouseWheelMoved(MouseWheelEvent paramMouseWheelEvent)
  {
  }
  public void mouseDragged(MouseEvent paramMouseEvent)
  {
  }
  public void mouseMoved(MouseEvent paramMouseEvent)
  {
  }
}
==================================================================================
package java.util;
import java.io.Serializable;
public class EventObject
  implements Serializable
{
  private static final long serialVersionUID = 5516075349620653480L;
  protected transient Object source;
  public EventObject(Object paramObject)
  {
    if (paramObject == null) {
      throw new IllegalArgumentException("null source");
    }
    this.source = paramObject;
  }
  public Object getSource()
  {
    return this.source;
  }
  public String toString()
  {
    return super.getClass().getName() + "[source=" + this.source + "]";
  }
}
==================================================================================
package java.awt;

import java.awt.event.ActionEvent;
import java.awt.event.AdjustmentEvent;
import java.awt.event.InputEvent;
import java.awt.event.ItemEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.peer.ComponentPeer;
import java.awt.peer.LightweightPeer;
import java.lang.reflect.Field;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.EventObject;
import sun.awt.AWTAccessor;
import sun.awt.AWTAccessor.AWTEventAccessor;

public abstract class AWTEvent extends EventObject
{
  private byte[] bdata;
  protected int id;
  protected boolean consumed;
  transient boolean focusManagerIsDispatching;
  transient boolean isPosted;
  private transient boolean isSystemGenerated;
  public static final long COMPONENT_EVENT_MASK = 1L;
  public static final long CONTAINER_EVENT_MASK = 2L;
  public static final long FOCUS_EVENT_MASK = 4L;
  public static final long KEY_EVENT_MASK = 8L;
  public static final long MOUSE_EVENT_MASK = 16L;
  public static final long MOUSE_MOTION_EVENT_MASK = 32L;
  public static final long WINDOW_EVENT_MASK = 64L;
  public static final long ACTION_EVENT_MASK = 128L;
  public static final long ADJUSTMENT_EVENT_MASK = 256L;
  public static final long ITEM_EVENT_MASK = 512L;
  public static final long TEXT_EVENT_MASK = 1024L;
  public static final long INPUT_METHOD_EVENT_MASK = 2048L;
  static final long INPUT_METHODS_ENABLED_MASK = 4096L;
  public static final long PAINT_EVENT_MASK = 8192L;
  public static final long INVOCATION_EVENT_MASK = 16384L;
  public static final long HIERARCHY_EVENT_MASK = 32768L;
  public static final long HIERARCHY_BOUNDS_EVENT_MASK = 65536L;
  public static final long MOUSE_WHEEL_EVENT_MASK = 131072L;
  public static final long WINDOW_STATE_EVENT_MASK = 262144L;
  public static final long WINDOW_FOCUS_EVENT_MASK = 524288L;
  public static final int RESERVED_ID_MAX = 1999;
  private static Field inputEvent_CanAccessSystemClipboard_Field = null;
  private static final long serialVersionUID = -1825314779160409405L;

  private static synchronized Field get_InputEvent_CanAccessSystemClipboard()
  {
    if (inputEvent_CanAccessSystemClipboard_Field == null) {
      inputEvent_CanAccessSystemClipboard_Field = (Field)AccessController.doPrivileged(new PrivilegedAction()
      {
        public Object run()
        {
          Field localField = null;
          try {
            localField = InputEvent.class.getDeclaredField("canAccessSystemClipboard");

            localField.setAccessible(true);
            return localField;
          } catch (SecurityException localSecurityException) {
          } catch (NoSuchFieldException localNoSuchFieldException) {
          }
          return null;
        }
      });
    }

    return inputEvent_CanAccessSystemClipboard_Field;
  }

  private static native void initIDs();

  public AWTEvent(Event paramEvent)
  {
    this(paramEvent.target, paramEvent.id);
  }

  public AWTEvent(Object paramObject, int paramInt)
  {
    super(paramObject);

    this.consumed = false;

    this.focusManagerIsDispatching = false;

    this.id = paramInt;
    switch (paramInt)
    {
    case 601:
    case 701:
    case 900:
    case 1001:
      this.consumed = true;
    }
  }

  public void setSource(Object paramObject)
  {
    if (this.source == paramObject) {
      return;
    }

    Object localObject1 = null;
    if (paramObject instanceof Component) {
      localObject1 = (Component)paramObject;
      while ((localObject1 != null) && (((Component)localObject1).peer != null) && (((Component)localObject1).peer instanceof LightweightPeer))
      {
        localObject1 = ((Component)localObject1).parent;
      }
    }

    synchronized (this) {
      this.source = paramObject;
      if (localObject1 != null) {
        ComponentPeer localComponentPeer = ((Component)localObject1).peer;
        if (localComponentPeer != null)
          nativeSetSource(localComponentPeer);
      }
    }
  }

  private native void nativeSetSource(ComponentPeer paramComponentPeer);

  public int getID()
  {
    return this.id;
  }

  public String toString()
  {
    String str = null;
    if (this.source instanceof Component)
      str = ((Component)this.source).getName();
    else if (this.source instanceof MenuComponent) {
      str = ((MenuComponent)this.source).getName();
    }
    return super.getClass().getName() + "[" + paramString() + "] on " + ((str != null) ? str : this.source);
  }

  public String paramString()
  {
    return "";
  }

  protected void consume()
  {
    switch (this.id)
    {
    case 401:
    case 402:
    case 501:
    case 502:
    case 503:
    case 504:
    case 505:
    case 506:
    case 507:
    case 1100:
    case 1101:
      this.consumed = true;
    }
  }

  protected boolean isConsumed()
  {
    return this.consumed;
  }

  Event convertToOld()
  {
    Object localObject1 = getSource();
    int i = this.id;
    Object localObject2;
    switch (this.id)
    {
    case 401:
    case 402:
      KeyEvent localKeyEvent = (KeyEvent)this;
      if (localKeyEvent.isActionKey()) {
        i = (this.id == 401) ? 403 : 404;
      }

      int j = localKeyEvent.getKeyCode();
      if ((j == 16) || (j == 17) || (j == 18))
      {
        return null;
      }

      return new Event(localObject1, localKeyEvent.getWhen(), i, 0, 0, Event.getOldEventKey(localKeyEvent), localKeyEvent.getModifiers() & 0xFFFFFFEF);
    case 501:
    case 502:
    case 503:
    case 504:
    case 505:
    case 506:
      MouseEvent localMouseEvent = (MouseEvent)this;

      Event localEvent = new Event(localObject1, localMouseEvent.getWhen(), i, localMouseEvent.getX(), localMouseEvent.getY(), 0, localMouseEvent.getModifiers() & 0xFFFFFFEF);

      localEvent.clickCount = localMouseEvent.getClickCount();
      return localEvent;
    case 1004:
      return new Event(localObject1, 1004, null);
    case 1005:
      return new Event(localObject1, 1005, null);
    case 201:
    case 203:
    case 204:
      return new Event(localObject1, i, null);
    case 100:
      if ((!(localObject1 instanceof Frame)) && (!(localObject1 instanceof Dialog))) break label670;
      localObject2 = ((Component)localObject1).getLocation();
      return new Event(localObject1, 0L, 205, ((Point)localObject2).x, ((Point)localObject2).y, 0, 0);
    case 1001:
      localObject2 = (ActionEvent)this;
      String str;
      if (localObject1 instanceof Button)
        str = ((Button)localObject1).getLabel();
      else if (localObject1 instanceof MenuItem)
        str = ((MenuItem)localObject1).getLabel();
      else {
        str = ((ActionEvent)localObject2).getActionCommand();
      }
      return new Event(localObject1, 0L, i, 0, 0, 0, ((ActionEvent)localObject2).getModifiers(), str);
    case 701:
      ItemEvent localItemEvent = (ItemEvent)this;
      Object localObject3;
      if (localObject1 instanceof List) {
        i = (localItemEvent.getStateChange() == 1) ? 701 : 702;

        localObject3 = localItemEvent.getItem();
      } else {
        i = 1001;
        if (localObject1 instanceof Choice) {
          localObject3 = localItemEvent.getItem();
        }
        else {
          localObject3 = Boolean.valueOf(localItemEvent.getStateChange() == 1);
        }
      }
      return new Event(localObject1, i, localObject3);
    case 601:
      AdjustmentEvent localAdjustmentEvent = (AdjustmentEvent)this;
      switch (localAdjustmentEvent.getAdjustmentType())
      {
      case 1:
        i = 602;
        break;
      case 2:
        i = 601;
        break;
      case 4:
        i = 604;
        break;
      case 3:
        i = 603;
        break;
      case 5:
        if (localAdjustmentEvent.getValueIsAdjusting()) {
          i = 605; break label652:
        }

        i = 607;

        break;
      default:
        return null;
      }
      label652: return new Event(localObject1, i, Integer.valueOf(localAdjustmentEvent.getValue()));
    }

    label670: return ((Event)(Event)null);
  }

  void copyPrivateDataInto(AWTEvent paramAWTEvent)
  {
    paramAWTEvent.bdata = this.bdata;

    if ((this instanceof InputEvent) && (paramAWTEvent instanceof InputEvent)) {
      Field localField = get_InputEvent_CanAccessSystemClipboard();
      if (localField != null)
        try {
          boolean bool = localField.getBoolean(this);
          localField.setBoolean(paramAWTEvent, bool);
        }
        catch (IllegalAccessException localIllegalAccessException) {
        }
    }
    paramAWTEvent.isSystemGenerated = this.isSystemGenerated;
  }

  void dispatched() {
    if (this instanceof InputEvent) {
      Field localField = get_InputEvent_CanAccessSystemClipboard();
      if (localField == null) return;
      try {
        localField.setBoolean(this, false);
      }
      catch (IllegalAccessException localIllegalAccessException)
      {
      }
    }
  }

  static
  {
    Toolkit.loadLibraries();
    if (!(GraphicsEnvironment.isHeadless())) {
      initIDs();
    }
    AWTAccessor.setAWTEventAccessor(new AWTAccessor.AWTEventAccessor() {
      public void setSystemGenerated(AWTEvent paramAWTEvent) {
        AWTEvent.access$002(paramAWTEvent, true);
      }

      public boolean isSystemGenerated(AWTEvent paramAWTEvent) {
        return paramAWTEvent.isSystemGenerated;
      }
    });
  }
}
==================================================================================
package java.awt.event;

import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.Rectangle;

public class ComponentEvent extends AWTEvent
{
  public static final int COMPONENT_FIRST = 100;
  public static final int COMPONENT_LAST = 103;
  public static final int COMPONENT_MOVED = 100;
  public static final int COMPONENT_RESIZED = 101;
  public static final int COMPONENT_SHOWN = 102;
  public static final int COMPONENT_HIDDEN = 103;
  private static final long serialVersionUID = 8101406823902992965L;

  public ComponentEvent(Component paramComponent, int paramInt)
  {
    super(paramComponent, paramInt);
  }

  public Component getComponent()
  {
    return ((this.source instanceof Component) ? (Component)this.source : null);
  }

  public String paramString()
  {
    Object localObject = (this.source != null) ? ((Component)this.source).getBounds() : null;
    String str;
    switch (this.id)
    {
    case 102:
      str = "COMPONENT_SHOWN";
      break;
    case 103:
      str = "COMPONENT_HIDDEN";
      break;
    case 100:
      str = "COMPONENT_MOVED (" + localObject.x + "," + localObject.y + " " + localObject.width + "x" + localObject.height + ")";

      break;
    case 101:
      str = "COMPONENT_RESIZED (" + localObject.x + "," + localObject.y + " " + localObject.width + "x" + localObject.height + ")";

      break;
    default:
      str = "unknown type";
    }
    return str;
  }
}
==================================================================================
package java.awt.event;

import java.awt.Component;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;

public abstract class InputEvent extends ComponentEvent
{
  public static final int SHIFT_MASK = 1;
  public static final int CTRL_MASK = 2;
  public static final int META_MASK = 4;
  public static final int ALT_MASK = 8;
  public static final int ALT_GRAPH_MASK = 32;
  public static final int BUTTON1_MASK = 16;
  public static final int BUTTON2_MASK = 8;
  public static final int BUTTON3_MASK = 4;
  public static final int SHIFT_DOWN_MASK = 64;
  public static final int CTRL_DOWN_MASK = 128;
  public static final int META_DOWN_MASK = 256;
  public static final int ALT_DOWN_MASK = 512;
  public static final int BUTTON1_DOWN_MASK = 1024;
  public static final int BUTTON2_DOWN_MASK = 2048;
  public static final int BUTTON3_DOWN_MASK = 4096;
  public static final int ALT_GRAPH_DOWN_MASK = 8192;
  static final int FIRST_HIGH_BIT = 16384;
  static final int JDK_1_3_MODIFIERS = 63;
  static final int HIGH_MODIFIERS = -16384;
  long when;
  int modifiers;
  private transient boolean canAccessSystemClipboard;
  static final long serialVersionUID = -2482525981698309786L;

  private static native void initIDs();

  InputEvent(Component paramComponent, int paramInt1, long paramLong, int paramInt2)
  {
    super(paramComponent, paramInt1);
    this.when = paramLong;
    this.modifiers = paramInt2;
    this.canAccessSystemClipboard = canAccessSystemClipboard();
  }

  private boolean canAccessSystemClipboard() {
    int i = 0;

    if (!(GraphicsEnvironment.isHeadless())) {
      SecurityManager localSecurityManager = System.getSecurityManager();
      if (localSecurityManager != null)
        try {
          localSecurityManager.checkSystemClipboardAccess();
          i = 1;
        }
        catch (SecurityException localSecurityException) {
        }
      else i = 1;

    }

    return i;
  }

  public boolean isShiftDown()
  {
    return ((this.modifiers & 0x1) != 0);
  }

  public boolean isControlDown()
  {
    return ((this.modifiers & 0x2) != 0);
  }

  public boolean isMetaDown()
  {
    return ((this.modifiers & 0x4) != 0);
  }

  public boolean isAltDown()
  {
    return ((this.modifiers & 0x8) != 0);
  }

  public boolean isAltGraphDown()
  {
    return ((this.modifiers & 0x20) != 0);
  }

  public long getWhen()
  {
    return this.when;
  }

  public int getModifiers()
  {
    return (this.modifiers & 0xFFFFC03F);
  }

  public int getModifiersEx()
  {
    return (this.modifiers & 0xFFFFFFC0);
  }

  public void consume()
  {
    this.consumed = true;
  }

  public boolean isConsumed()
  {
    return this.consumed;
  }

  public static String getModifiersExText(int paramInt)
  {
    StringBuffer localStringBuffer = new StringBuffer();
    if ((paramInt & 0x100) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.meta", "Meta"));
      localStringBuffer.append("+");
    }
    if ((paramInt & 0x80) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.control", "Ctrl"));
      localStringBuffer.append("+");
    }
    if ((paramInt & 0x200) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.alt", "Alt"));
      localStringBuffer.append("+");
    }
    if ((paramInt & 0x40) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.shift", "Shift"));
      localStringBuffer.append("+");
    }
    if ((paramInt & 0x2000) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.altGraph", "Alt Graph"));
      localStringBuffer.append("+");
    }
    if ((paramInt & 0x400) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.button1", "Button1"));
      localStringBuffer.append("+");
    }
    if ((paramInt & 0x800) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.button2", "Button2"));
      localStringBuffer.append("+");
    }
    if ((paramInt & 0x1000) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.button3", "Button3"));
      localStringBuffer.append("+");
    }
    if (localStringBuffer.length() > 0) {
      localStringBuffer.setLength(localStringBuffer.length() - 1);
    }
    return localStringBuffer.toString();
  }

  static
  {
    NativeLibLoader.loadLibraries();
    if (!(GraphicsEnvironment.isHeadless()))
      initIDs();
  }
}
==================================================================================
package java.awt.event;

import java.awt.Component;
import java.awt.GraphicsEnvironment;
import java.awt.IllegalComponentStateException;
import java.awt.Point;
import java.awt.Toolkit;
import java.io.IOException;
import java.io.ObjectInputStream;

public class MouseEvent extends InputEvent
{
  public static final int MOUSE_FIRST = 500;
  public static final int MOUSE_LAST = 507;
  public static final int MOUSE_CLICKED = 500;
  public static final int MOUSE_PRESSED = 501;
  public static final int MOUSE_RELEASED = 502;
  public static final int MOUSE_MOVED = 503;
  public static final int MOUSE_ENTERED = 504;
  public static final int MOUSE_EXITED = 505;
  public static final int MOUSE_DRAGGED = 506;
  public static final int MOUSE_WHEEL = 507;
  public static final int NOBUTTON = 0;
  public static final int BUTTON1 = 1;
  public static final int BUTTON2 = 2;
  public static final int BUTTON3 = 3;
  int x;
  int y;
  private int xAbs;
  private int yAbs;
  int clickCount;
  int button;
  boolean popupTrigger;
  private static final long serialVersionUID = -991214153494842848L;

  private static native void initIDs();

  public Point getLocationOnScreen()
  {
    return new Point(this.xAbs, this.yAbs);
  }

  public int getXOnScreen()
  {
    return this.xAbs;
  }

  public int getYOnScreen()
  {
    return this.yAbs;
  }

  public MouseEvent(Component paramComponent, int paramInt1, long paramLong, int paramInt2, int paramInt3, int paramInt4, int paramInt5, boolean paramBoolean, int paramInt6)
  {
    this(paramComponent, paramInt1, paramLong, paramInt2, paramInt3, paramInt4, 0, 0, paramInt5, paramBoolean, paramInt6);
    Point localPoint = new Point(0, 0);
    try {
      localPoint = paramComponent.getLocationOnScreen();
      this.xAbs = (localPoint.x + paramInt3);
      this.yAbs = (localPoint.y + paramInt4);
    } catch (IllegalComponentStateException localIllegalComponentStateException) {
      this.xAbs = 0;
      this.yAbs = 0;
    }
  }

  public MouseEvent(Component paramComponent, int paramInt1, long paramLong, int paramInt2, int paramInt3, int paramInt4, int paramInt5, boolean paramBoolean)
  {
    this(paramComponent, paramInt1, paramLong, paramInt2, paramInt3, paramInt4, paramInt5, paramBoolean, 0);
  }

  public MouseEvent(Component paramComponent, int paramInt1, long paramLong, int paramInt2, int paramInt3, int paramInt4, int paramInt5, int paramInt6, int paramInt7, boolean paramBoolean, int paramInt8)
  {
    super(paramComponent, paramInt1, paramLong, paramInt2);

    this.popupTrigger = false;

    this.x = paramInt3;
    this.y = paramInt4;
    this.xAbs = paramInt5;
    this.yAbs = paramInt6;
    this.clickCount = paramInt7;
    this.popupTrigger = paramBoolean;
    if ((paramInt8 < 0) || (paramInt8 > 3)) {
      throw new IllegalArgumentException("Invalid button value");
    }
    this.button = paramInt8;
    if ((getModifiers() != 0) && (getModifiersEx() == 0)) {
      setNewModifiers(); } else {
      if ((getModifiers() != 0) || ((getModifiersEx() == 0) && (paramInt8 == 0))) {
        return;
      }
      setOldModifiers();
    }
  }

  public int getX()
  {
    return this.x;
  }

  public int getY()
  {
    return this.y;
  }

  public Point getPoint()
  {
    int i;
    int j;
    synchronized (this) {
      i = this.x;
      j = this.y;
    }
    return new Point(i, j);
  }

  public synchronized void translatePoint(int paramInt1, int paramInt2)
  {
    this.x += paramInt1;
    this.y += paramInt2;
  }

  public int getClickCount()
  {
    return this.clickCount;
  }

  public int getButton()
  {
    return this.button;
  }

  public boolean isPopupTrigger()
  {
    return this.popupTrigger;
  }

  public static String getMouseModifiersText(int paramInt)
  {
    StringBuffer localStringBuffer = new StringBuffer();
    if ((paramInt & 0x8) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.alt", "Alt"));
      localStringBuffer.append("+");
    }
    if ((paramInt & 0x4) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.meta", "Meta"));
      localStringBuffer.append("+");
    }
    if ((paramInt & 0x2) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.control", "Ctrl"));
      localStringBuffer.append("+");
    }
    if ((paramInt & 0x1) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.shift", "Shift"));
      localStringBuffer.append("+");
    }
    if ((paramInt & 0x20) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.altGraph", "Alt Graph"));
      localStringBuffer.append("+");
    }
    if ((paramInt & 0x10) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.button1", "Button1"));
      localStringBuffer.append("+");
    }
    if ((paramInt & 0x8) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.button2", "Button2"));
      localStringBuffer.append("+");
    }
    if ((paramInt & 0x4) != 0) {
      localStringBuffer.append(Toolkit.getProperty("AWT.button3", "Button3"));
      localStringBuffer.append("+");
    }
    if (localStringBuffer.length() > 0) {
      localStringBuffer.setLength(localStringBuffer.length() - 1);
    }
    return localStringBuffer.toString();
  }

  public String paramString()
  {
    StringBuffer localStringBuffer = new StringBuffer(80);

    switch (this.id)
    {
    case 501:
      localStringBuffer.append("MOUSE_PRESSED");
      break;
    case 502:
      localStringBuffer.append("MOUSE_RELEASED");
      break;
    case 500:
      localStringBuffer.append("MOUSE_CLICKED");
      break;
    case 504:
      localStringBuffer.append("MOUSE_ENTERED");
      break;
    case 505:
      localStringBuffer.append("MOUSE_EXITED");
      break;
    case 503:
      localStringBuffer.append("MOUSE_MOVED");
      break;
    case 506:
      localStringBuffer.append("MOUSE_DRAGGED");
      break;
    case 507:
      localStringBuffer.append("MOUSE_WHEEL");
      break;
    default:
      localStringBuffer.append("unknown type");
    }

    localStringBuffer.append(",(").append(this.x).append(",").append(this.y).append(")");
    localStringBuffer.append(",absolute(").append(this.xAbs).append(",").append(this.yAbs).append(")");

    localStringBuffer.append(",button=").append(getButton());

    if (getModifiers() != 0) {
      localStringBuffer.append(",modifiers=").append(getMouseModifiersText(this.modifiers));
    }

    if (getModifiersEx() != 0) {
      localStringBuffer.append(",extModifiers=").append(getModifiersExText(this.modifiers));
    }

    localStringBuffer.append(",clickCount=").append(this.clickCount);

    return localStringBuffer.toString();
  }

  private void setNewModifiers()
  {
    if ((this.modifiers & 0x10) != 0) {
      this.modifiers |= 1024;
    }
    if ((this.modifiers & 0x8) != 0) {
      this.modifiers |= 2048;
    }
    if ((this.modifiers & 0x4) != 0) {
      this.modifiers |= 4096;
    }
    if ((this.id == 501) || (this.id == 502) || (this.id == 500))
    {
      if ((this.modifiers & 0x10) != 0) {
        this.button = 1;
        this.modifiers &= -13;
        if (this.id != 501)
          this.modifiers &= -1025;
      }
      else if ((this.modifiers & 0x8) != 0) {
        this.button = 2;
        this.modifiers &= -21;
        if (this.id != 501)
          this.modifiers &= -2049;
      }
      else if ((this.modifiers & 0x4) != 0) {
        this.button = 3;
        this.modifiers &= -25;
        if (this.id != 501) {
          this.modifiers &= -4097;
        }
      }
    }
    if ((this.modifiers & 0x8) != 0) {
      this.modifiers |= 512;
    }
    if ((this.modifiers & 0x4) != 0) {
      this.modifiers |= 256;
    }
    if ((this.modifiers & 0x1) != 0) {
      this.modifiers |= 64;
    }
    if ((this.modifiers & 0x2) != 0) {
      this.modifiers |= 128;
    }
    if ((this.modifiers & 0x20) != 0)
      this.modifiers |= 8192;
  }

  private void setOldModifiers()
  {
    if ((this.id == 501) || (this.id == 502) || (this.id == 500))
    {
      switch (this.button)
      {
      case 1:
        this.modifiers |= 16;
        break;
      case 2:
        this.modifiers |= 8;
        break;
      case 3:
        this.modifiers |= 4;
      }
    }
    else {
      if ((this.modifiers & 0x400) != 0) {
        this.modifiers |= 16;
      }
      if ((this.modifiers & 0x800) != 0) {
        this.modifiers |= 8;
      }
      if ((this.modifiers & 0x1000) != 0) {
        this.modifiers |= 4;
      }
    }
    if ((this.modifiers & 0x200) != 0) {
      this.modifiers |= 8;
    }
    if ((this.modifiers & 0x100) != 0) {
      this.modifiers |= 4;
    }
    if ((this.modifiers & 0x40) != 0) {
      this.modifiers |= 1;
    }
    if ((this.modifiers & 0x80) != 0) {
      this.modifiers |= 2;
    }
    if ((this.modifiers & 0x2000) != 0)
      this.modifiers |= 32;
  }

  private void readObject(ObjectInputStream paramObjectInputStream)
    throws IOException, ClassNotFoundException
  {
    paramObjectInputStream.defaultReadObject();
    if ((getModifiers() != 0) && (getModifiersEx() == 0))
      setNewModifiers();
  }

  static
  {
    NativeLibLoader.loadLibraries();
    if (!(GraphicsEnvironment.isHeadless()))
      initIDs();
  }
}

package java.awt;

import TT;;
import java.applet.Applet;
import java.awt.dnd.DropTarget;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.HierarchyBoundsListener;
import java.awt.event.HierarchyEvent;
import java.awt.event.HierarchyListener;
import java.awt.event.InputEvent;
import java.awt.event.InputMethodEvent;
import java.awt.event.InputMethodListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.event.PaintEvent;
import java.awt.event.WindowEvent;
import java.awt.im.InputMethodRequests;
import java.awt.image.BufferStrategy;
import java.awt.image.ColorModel;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.awt.image.VolatileImage;
import java.awt.peer.ComponentPeer;
import java.awt.peer.ContainerPeer;
import java.awt.peer.LightweightPeer;
import java.awt.peer.MouseInfoPeer;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OptionalDataException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Collections;
import java.util.EventListener;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import java.util.WeakHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleComponent;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleSelection;
import javax.accessibility.AccessibleState;
import javax.accessibility.AccessibleStateSet;
import javax.swing.JComponent;
import sun.awt.AWTAccessor;
import sun.awt.AWTAccessor.ComponentAccessor;
import sun.awt.AppContext;
import sun.awt.CausedFocusEvent.Cause;
import sun.awt.ConstrainableGraphics;
import sun.awt.DebugHelper;
import sun.awt.EmbeddedFrame;
import sun.awt.RequestFocusController;
import sun.awt.SubRegionShowable;
import sun.awt.WindowClosingListener;
import sun.awt.dnd.SunDropTargetEvent;
import sun.awt.im.CompositionArea;
import sun.awt.image.VSyncedBSManager;
import sun.font.FontDesignMetrics;
import sun.font.FontManager;
import sun.java2d.SunGraphics2D;
import sun.java2d.SunGraphicsEnvironment;
import sun.java2d.pipe.hw.ExtendedBufferCapabilities;
import sun.java2d.pipe.hw.ExtendedBufferCapabilities.VSyncType;
import sun.security.action.GetPropertyAction;

public abstract class Component
  implements ImageObserver, MenuContainer, Serializable
{
  private static final Logger focusLog;
  private static final Logger log;
  transient ComponentPeer peer;
  transient Container parent;
  transient AppContext appContext;
  int x;
  int y;
  int width;
  int height;
  Color foreground;
  Color background;
  Font font;
  Font peerFont;
  Cursor cursor;
  Locale locale;
  transient GraphicsConfiguration graphicsConfig = null;

  transient BufferStrategy bufferStrategy = null;

  boolean ignoreRepaint = false;

  boolean visible = true;

  boolean enabled = true;

  boolean valid = false;
  DropTarget dropTarget;
  Vector popups;
  private String name;
  private boolean nameExplicitlySet = false;

  private boolean focusable = true;
  private static final int FOCUS_TRAVERSABLE_UNKNOWN = 0;
  private static final int FOCUS_TRAVERSABLE_DEFAULT = 1;
  private static final int FOCUS_TRAVERSABLE_SET = 2;
  private int isFocusTraversableOverridden = 0;
  Set[] focusTraversalKeys;
  private static final String[] focusTraversalKeyPropertyNames;
  private boolean focusTraversalKeysEnabled = true;
  static final Object LOCK;
  Dimension minSize;
  boolean minSizeSet;
  Dimension prefSize;
  boolean prefSizeSet;
  Dimension maxSize;
  boolean maxSizeSet;
  transient ComponentOrientation componentOrientation = ComponentOrientation.UNKNOWN;

  boolean newEventsOnly = false;
  transient ComponentListener componentListener;
  transient FocusListener focusListener;
  transient HierarchyListener hierarchyListener;
  transient HierarchyBoundsListener hierarchyBoundsListener;
  transient KeyListener keyListener;
  transient MouseListener mouseListener;
  transient MouseMotionListener mouseMotionListener;
  transient MouseWheelListener mouseWheelListener;
  transient InputMethodListener inputMethodListener;
  transient RuntimeException windowClosingException = null;
  static final String actionListenerK = "actionL";
  static final String adjustmentListenerK = "adjustmentL";
  static final String componentListenerK = "componentL";
  static final String containerListenerK = "containerL";
  static final String focusListenerK = "focusL";
  static final String itemListenerK = "itemL";
  static final String keyListenerK = "keyL";
  static final String mouseListenerK = "mouseL";
  static final String mouseMotionListenerK = "mouseMotionL";
  static final String mouseWheelListenerK = "mouseWheelL";
  static final String textListenerK = "textL";
  static final String ownedWindowK = "ownedL";
  static final String windowListenerK = "windowL";
  static final String inputMethodListenerK = "inputMethodL";
  static final String hierarchyListenerK = "hierarchyL";
  static final String hierarchyBoundsListenerK = "hierarchyBoundsL";
  static final String windowStateListenerK = "windowStateL";
  static final String windowFocusListenerK = "windowFocusL";
  long eventMask = 4096L;
  private static final DebugHelper dbg;
  static boolean isInc;
  static int incRate;
  public static final float TOP_ALIGNMENT = 0.0F;
  public static final float CENTER_ALIGNMENT = 0.5F;
  public static final float BOTTOM_ALIGNMENT = 1.0F;
  public static final float LEFT_ALIGNMENT = 0.0F;
  public static final float RIGHT_ALIGNMENT = 1.0F;
  private static final long serialVersionUID = -7644114512714619750L;
  private PropertyChangeSupport changeSupport;
  boolean isPacked = false;

  private transient Object privateKey = new Object();

  private int boundsOp = 3;
  transient boolean backgroundEraseDisabled;
  transient EventQueueItem[] eventCache;
  private transient boolean coalescingEnabled = checkCoalescing();
  private static final Map, Boolean> coalesceMap;
  private static final Class[] coalesceEventsParams;
  private static RequestFocusController requestFocusController;
  private int componentSerializedDataVersion = 4;
  transient NativeInLightFixer nativeInLightFixer;
  AccessibleContext accessibleContext = null;

  int getBoundsOp()
  {
    assert (Thread.holdsLock(getTreeLock()));
    return this.boundsOp;
  }

  void setBoundsOp(int paramInt) {
    assert (Thread.holdsLock(getTreeLock()));
    if (paramInt == 5) {
      this.boundsOp = 3;
    }
    else if (this.boundsOp == 3)
      this.boundsOp = paramInt;
  }

  protected Component()
  {
    this.appContext = AppContext.getAppContext();
  }

  void initializeFocusTraversalKeys() {
    this.focusTraversalKeys = new Set[3];
  }

  String constructComponentName()
  {
    return null;
  }

  public String getName()
  {
    if ((this.name == null) && (!(this.nameExplicitlySet))) {
      synchronized (this) {
        if ((this.name == null) && (!(this.nameExplicitlySet)))
          this.name = constructComponentName();
      }
    }
    return this.name;
  }

  public void setName(String paramString)
  {
    String str;
    synchronized (this) {
      str = this.name;
      this.name = paramString;
      this.nameExplicitlySet = true;
    }
    firePropertyChange("name", str, paramString);
  }

  public Container getParent()
  {
    return getParent_NoClientCode();
  }

  final Container getParent_NoClientCode()
  {
    return this.parent;
  }

  @Deprecated
  public ComponentPeer getPeer()
  {
    return this.peer;
  }

  public synchronized void setDropTarget(DropTarget paramDropTarget)
  {
    if ((paramDropTarget == this.dropTarget) || ((this.dropTarget != null) && (this.dropTarget.equals(paramDropTarget))))
      return;
    DropTarget localDropTarget1;
    if ((localDropTarget1 = this.dropTarget) != null) {
      if (this.peer != null) this.dropTarget.removeNotify(this.peer);

      DropTarget localDropTarget2 = this.dropTarget;

      this.dropTarget = null;
      try
      {
        localDropTarget2.setComponent(null);
      }
      catch (IllegalArgumentException localIllegalArgumentException2)
      {
      }

    }

    if ((this.dropTarget = paramDropTarget) == null) return;
    try {
      this.dropTarget.setComponent(this);
      if (this.peer != null) this.dropTarget.addNotify(this.peer);
    } catch (IllegalArgumentException localIllegalArgumentException1) {
      if (localDropTarget1 == null) return;
      try {
        localDropTarget1.setComponent(this);
        if (this.peer != null) this.dropTarget.addNotify(this.peer);
      }
      catch (IllegalArgumentException localIllegalArgumentException3)
      {
      }
    }
  }

  public synchronized DropTarget getDropTarget()
  {
    return this.dropTarget;
  }

  public GraphicsConfiguration getGraphicsConfiguration()
  {
    synchronized (getTreeLock()) {
      if (this.graphicsConfig != null)
        return this.graphicsConfig;
      if (getParent() != null) {
        return getParent().getGraphicsConfiguration();
      }
      return null;
    }
  }

  final GraphicsConfiguration getGraphicsConfiguration_NoClientCode()
  {
    GraphicsConfiguration localGraphicsConfiguration = this.graphicsConfig;
    Container localContainer = this.parent;
    if (localGraphicsConfiguration != null)
      return localGraphicsConfiguration;
    if (localContainer != null) {
      return localContainer.getGraphicsConfiguration_NoClientCode();
    }
    return null;
  }

  void resetGC()
  {
    synchronized (getTreeLock()) {
      this.graphicsConfig = null;
    }
  }

  void setGCFromPeer()
  {
    synchronized (getTreeLock()) {
      if (this.peer != null)
      {
        this.graphicsConfig = this.peer.getGraphicsConfiguration();
      }
      else this.graphicsConfig = null;
    }
  }

  void checkGD(String paramString)
  {
    if ((this.graphicsConfig == null) ||
      (this.graphicsConfig.getDevice().getIDstring().equals(paramString))) return;
    throw new IllegalArgumentException("adding a container to a container on a different GraphicsDevice");
  }

  public final Object getTreeLock()
  {
    return LOCK;
  }

  public Toolkit getToolkit()
  {
    return getToolkitImpl();
  }

  final Toolkit getToolkitImpl()
  {
    ComponentPeer localComponentPeer = this.peer;
    if ((localComponentPeer != null) && (!(localComponentPeer instanceof LightweightPeer))) {
      return localComponentPeer.getToolkit();
    }
    Container localContainer = this.parent;
    if (localContainer != null) {
      return localContainer.getToolkitImpl();
    }
    return Toolkit.getDefaultToolkit();
  }

  public boolean isValid()
  {
    return ((this.peer != null) && (this.valid));
  }

  public boolean isDisplayable()
  {
    return (getPeer() != null);
  }

  public boolean isVisible()
  {
    return isVisible_NoClientCode(); }

  final boolean isVisible_NoClientCode() {
    return this.visible;
  }

  boolean isRecursivelyVisible()
  {
    return ((this.visible) && (((this.parent == null) || (this.parent.isRecursivelyVisible()))));
  }

  Point pointRelativeToComponent(Point paramPoint)
  {
    Point localPoint = getLocationOnScreen();
    return new Point(paramPoint.x - localPoint.x, paramPoint.y - localPoint.y);
  }

  Component findUnderMouseInWindow(PointerInfo paramPointerInfo)
  {
    if (!(isShowing())) {
      return null;
    }
    Window localWindow = getContainingWindow();
    if (!(Toolkit.getDefaultToolkit().getMouseInfoPeer().isWindowUnderMouse(localWindow))) {
      return null;
    }

    Point localPoint = localWindow.pointRelativeToComponent(paramPointerInfo.getLocation());
    Component localComponent = localWindow.findComponentAt(localPoint.x, localPoint.y, true);

    return localComponent;
  }

  public Point getMousePosition()
    throws HeadlessException
  {
    if (GraphicsEnvironment.isHeadless()) {
      throw new HeadlessException();
    }

    PointerInfo localPointerInfo = (PointerInfo)AccessController.doPrivileged(new PrivilegedAction()
    {
      public Object run() {
        return MouseInfo.getPointerInfo();
      }
    });
    synchronized (getTreeLock()) {
      Component localComponent = findUnderMouseInWindow(localPointerInfo);
      if (!(isSameOrAncestorOf(localComponent, true))) {
        return null;
      }
      return pointRelativeToComponent(localPointerInfo.getLocation());
    }
  }

  boolean isSameOrAncestorOf(Component paramComponent, boolean paramBoolean)
  {
    return (paramComponent == this);
  }

  public boolean isShowing()
  {
    if ((this.visible) && (this.peer != null)) {
      Container localContainer = this.parent;
      return ((localContainer == null) || (localContainer.isShowing()));
    }
    return false;
  }

  public boolean isEnabled()
  {
    return isEnabledImpl();
  }

  final boolean isEnabledImpl()
  {
    return this.enabled;
  }

  public void setEnabled(boolean paramBoolean)
  {
    enable(paramBoolean);
  }

  @Deprecated
  public void enable()
  {
    if (!(this.enabled)) {
      synchronized (getTreeLock()) {
        this.enabled = true;
        ComponentPeer localComponentPeer = this.peer;
        if (localComponentPeer != null) {
          localComponentPeer.enable();
          if (this.visible) {
            updateCursorImmediately();
          }
        }
      }
      if (this.accessibleContext != null)
        this.accessibleContext.firePropertyChange("AccessibleState", null, AccessibleState.ENABLED);
    }
  }

  @Deprecated
  public void enable(boolean paramBoolean)
  {
    if (paramBoolean)
      enable();
    else
      disable();
  }

  @Deprecated
  public void disable()
  {
    if (this.enabled) {
      KeyboardFocusManager.clearMostRecentFocusOwner(this);
      synchronized (getTreeLock()) {
        this.enabled = false;
        if (isFocusOwner())
        {
          autoTransferFocus(false);
        }
        ComponentPeer localComponentPeer = this.peer;
        if (localComponentPeer != null) {
          localComponentPeer.disable();
          if (this.visible) {
            updateCursorImmediately();
          }
        }
      }
      if (this.accessibleContext != null)
        this.accessibleContext.firePropertyChange("AccessibleState", null, AccessibleState.ENABLED);
    }
  }

  public boolean isDoubleBuffered()
  {
    return false;
  }

  public void enableInputMethods(boolean paramBoolean)
  {
    java.awt.im.InputContext localInputContext;
    if (paramBoolean) {
      if ((this.eventMask & 0x1000) != 0L) {
        return;
      }

      if (isFocusOwner()) {
        localInputContext = getInputContext();
        if (localInputContext != null) {
          FocusEvent localFocusEvent = new FocusEvent(this, 1004);

          localInputContext.dispatchEvent(localFocusEvent);
        }
      }

      this.eventMask |= 4096L;
    } else {
      if ((this.eventMask & 0x1000) != 0L) {
        localInputContext = getInputContext();
        if (localInputContext != null) {
          localInputContext.endComposition();
          localInputContext.removeNotify(this);
        }
      }
      this.eventMask &= -4097L;
    }
  }

  public void setVisible(boolean paramBoolean)
  {
    show(paramBoolean);
  }

  @Deprecated
  public void show()
  {
    if (!(this.visible)) {
      synchronized (getTreeLock()) {
        this.visible = true;
        ComponentPeer localComponentPeer = this.peer;
        if (localComponentPeer != null) {
          localComponentPeer.show();
          createHierarchyEvents(1400, this, this.parent, 4L, Toolkit.enabledOnToolkit(32768L));

          if (localComponentPeer instanceof LightweightPeer) {
            repaint();
          }
          updateCursorImmediately();
        }

        if ((this.componentListener != null) || ((this.eventMask & 1L) != 0L) || (Toolkit.enabledOnToolkit(1L)))
        {
          ComponentEvent localComponentEvent = new ComponentEvent(this, 102);

          Toolkit.getEventQueue().postEvent(localComponentEvent);
        }
      }
      ??? = this.parent;
      if (??? != null)
        ((Container)???).invalidate();
    }
  }

  @Deprecated
  public void show(boolean paramBoolean)
  {
    if (paramBoolean)
      show();
    else
      hide();
  }

  boolean containsFocus()
  {
    return isFocusOwner();
  }

  void clearMostRecentFocusOwnerOnHide() {
    KeyboardFocusManager.clearMostRecentFocusOwner(this);
  }

  void clearCurrentFocusCycleRootOnHide()
  {
  }

  @Deprecated
  public void hide()
  {
    this.isPacked = false;

    if (this.visible) {
      clearCurrentFocusCycleRootOnHide();
      clearMostRecentFocusOwnerOnHide();
      synchronized (getTreeLock()) {
        this.visible = false;
        if (containsFocus()) {
          autoTransferFocus(true);
        }
        ComponentPeer localComponentPeer = this.peer;
        if (localComponentPeer != null) {
          localComponentPeer.hide();
          createHierarchyEvents(1400, this, this.parent, 4L, Toolkit.enabledOnToolkit(32768L));

          if (localComponentPeer instanceof LightweightPeer) {
            repaint();
          }
          updateCursorImmediately();
        }
        if ((this.componentListener != null) || ((this.eventMask & 1L) != 0L) || (Toolkit.enabledOnToolkit(1L)))
        {
          ComponentEvent localComponentEvent = new ComponentEvent(this, 103);

          Toolkit.getEventQueue().postEvent(localComponentEvent);
        }
      }
      ??? = this.parent;
      if (??? != null)
        ((Container)???).invalidate();
    }
  }

  public Color getForeground()
  {
    Color localColor = this.foreground;
    if (localColor != null) {
      return localColor;
    }
    Container localContainer = this.parent;
    return ((localContainer != null) ? localContainer.getForeground() : null);
  }

  public void setForeground(Color paramColor)
  {
    Color localColor = this.foreground;
    ComponentPeer localComponentPeer = this.peer;
    this.foreground = paramColor;
    if (localComponentPeer != null) {
      paramColor = getForeground();
      if (paramColor != null) {
        localComponentPeer.setForeground(paramColor);
      }

    }

    firePropertyChange("foreground", localColor, paramColor);
  }

  public boolean isForegroundSet()
  {
    return (this.foreground != null);
  }

  public Color getBackground()
  {
    Color localColor = this.background;
    if (localColor != null) {
      return localColor;
    }
    Container localContainer = this.parent;
    return ((localContainer != null) ? localContainer.getBackground() : null);
  }

  public void setBackground(Color paramColor)
  {
    Color localColor = this.background;
    ComponentPeer localComponentPeer = this.peer;
    this.background = paramColor;
    if (localComponentPeer != null) {
      paramColor = getBackground();
      if (paramColor != null) {
        localComponentPeer.setBackground(paramColor);
      }

    }

    firePropertyChange("background", localColor, paramColor);
  }

  public boolean isBackgroundSet()
  {
    return (this.background != null);
  }

  public Font getFont()
  {
    return getFont_NoClientCode();
  }

  final Font getFont_NoClientCode()
  {
    Font localFont = this.font;
    if (localFont != null) {
      return localFont;
    }
    Container localContainer = this.parent;
    return ((localContainer != null) ? localContainer.getFont_NoClientCode() : null);
  }

  public void setFont(Font paramFont)
  {
    Font localFont1;
    Font localFont2;
    synchronized (getTreeLock()) {
      synchronized (this) {
        localFont1 = this.font;
        localFont2 = this.font = paramFont;
      }
      ??? = this.peer;
      if (??? != null) {
        paramFont = getFont();
        if (paramFont != null) {
          ((ComponentPeer)???).setFont(paramFont);
          this.peerFont = paramFont;
        }
      }

    }

    firePropertyChange("font", localFont1, localFont2);

    if ((!(this.valid)) || (paramFont == localFont1) || ((localFont1 != null) && (localFont1.equals(paramFont))))
      return;
    invalidate();
  }

  public boolean isFontSet()
  {
    return (this.font != null);
  }

  public Locale getLocale()
  {
    Locale localLocale = this.locale;
    if (localLocale != null) {
      return localLocale;
    }
    Container localContainer = this.parent;

    if (localContainer == null) {
      throw new IllegalComponentStateException("This component must have a parent in order to determine its locale");
    }
    return localContainer.getLocale();
  }

  public void setLocale(Locale paramLocale)
  {
    Locale localLocale = this.locale;
    this.locale = paramLocale;

    firePropertyChange("locale", localLocale, paramLocale);

    if (this.valid)
      invalidate();
  }

  public ColorModel getColorModel()
  {
    ComponentPeer localComponentPeer = this.peer;
    if ((localComponentPeer != null) && (!(localComponentPeer instanceof LightweightPeer)))
      return localComponentPeer.getColorModel();
    if (GraphicsEnvironment.isHeadless()) {
      return ColorModel.getRGBdefault();
    }
    return getToolkit().getColorModel();
  }

  public Point getLocation()
  {
    return location();
  }

  public Point getLocationOnScreen()
  {
    synchronized (getTreeLock()) {
      return getLocationOnScreen_NoTreeLock();
    }
  }

  final Point getLocationOnScreen_NoTreeLock()
  {
    if ((this.peer != null) && (isShowing())) {
      if (this.peer instanceof LightweightPeer)
      {
        localObject1 = getNativeContainer();
        Point localPoint = ((Container)localObject1).peer.getLocationOnScreen();
        for (Object localObject2 = this; localObject2 != localObject1; localObject2 = ((Component)localObject2).getParent()) {
          localPoint.x += ((Component)localObject2).x;
          localPoint.y += ((Component)localObject2).y;
        }
        return localPoint;
      }
      Object localObject1 = this.peer.getLocationOnScreen();
      return localObject1;
    }

    throw new IllegalComponentStateException("component must be showing on the screen to determine its location");
  }

  @Deprecated
  public Point location()
  {
    return new Point(this.x, this.y);
  }

  public void setLocation(int paramInt1, int paramInt2)
  {
    move(paramInt1, paramInt2);
  }

  @Deprecated
  public void move(int paramInt1, int paramInt2)
  {
    synchronized (getTreeLock()) {
      setBoundsOp(1);
      setBounds(paramInt1, paramInt2, this.width, this.height);
    }
  }

  public void setLocation(Point paramPoint)
  {
    setLocation(paramPoint.x, paramPoint.y);
  }

  public Dimension getSize()
  {
    return size();
  }

  @Deprecated
  public Dimension size()
  {
    return new Dimension(this.width, this.height);
  }

  public void setSize(int paramInt1, int paramInt2)
  {
    resize(paramInt1, paramInt2);
  }

  @Deprecated
  public void resize(int paramInt1, int paramInt2)
  {
    synchronized (getTreeLock()) {
      setBoundsOp(2);
      setBounds(this.x, this.y, paramInt1, paramInt2);
    }
  }

  public void setSize(Dimension paramDimension)
  {
    resize(paramDimension);
  }

  @Deprecated
  public void resize(Dimension paramDimension)
  {
    setSize(paramDimension.width, paramDimension.height);
  }

  public Rectangle getBounds()
  {
    return bounds();
  }

  @Deprecated
  public Rectangle bounds()
  {
    return new Rectangle(this.x, this.y, this.width, this.height);
  }

  public void setBounds(int paramInt1, int paramInt2, int paramInt3, int paramInt4)
  {
    reshape(paramInt1, paramInt2, paramInt3, paramInt4);
  }

  @Deprecated
  public void reshape(int paramInt1, int paramInt2, int paramInt3, int paramInt4)
  {
    synchronized (getTreeLock()) {
      try {
        setBoundsOp(3);
        boolean bool1 = (this.width != paramInt3) || (this.height != paramInt4);
        boolean bool2 = (this.x != paramInt1) || (this.y != paramInt2);
        if ((!(bool1)) && (!(bool2))) {
          setBoundsOp(5);
          return; }
        int i = this.x;
        int j = this.y;
        int k = this.width;
        int l = this.height;
        this.x = paramInt1;
        this.y = paramInt2;
        this.width = paramInt3;
        this.height = paramInt4;

        if (bool1) {
          this.isPacked = false;
        }

        int i1 = 1;
        if (this.peer != null)
        {
          if (!(this.peer instanceof LightweightPeer)) {
            reshapeNativePeer(paramInt1, paramInt2, paramInt3, paramInt4, getBoundsOp());

            bool1 = (k != this.width) || (l != this.height);
            bool2 = (i != this.x) || (j != this.y);

            if (this instanceof Window) {
              i1 = 0;
            }
          }
          if (bool1) {
            invalidate();
          }
          if ((this.parent != null) && (this.parent.valid)) {
            this.parent.invalidate();
          }
        }
        if (i1 != 0) {
          notifyNewBounds(bool1, bool2);
        }
        repaintParentIfNeeded(i, j, k, l);
      } finally {
        setBoundsOp(5);
      }
    }
  }

  private void repaintParentIfNeeded(int paramInt1, int paramInt2, int paramInt3, int paramInt4)
  {
    if ((this.parent == null) || (!(this.peer instanceof LightweightPeer)) || (!(isShowing())))
      return;
    this.parent.repaint(paramInt1, paramInt2, paramInt3, paramInt4);

    repaint();
  }

  private void reshapeNativePeer(int paramInt1, int paramInt2, int paramInt3, int paramInt4, int paramInt5)
  {
    int i = paramInt1;
    int j = paramInt2;
    Container localContainer = this.parent;
    while ((localContainer != null) && (localContainer.peer instanceof LightweightPeer))
    {
      i += localContainer.x;
      j += localContainer.y;

      localContainer = localContainer.parent;
    }

    this.peer.setBounds(i, j, paramInt3, paramInt4, paramInt5);
  }

  private void notifyNewBounds(boolean paramBoolean1, boolean paramBoolean2)
  {
    if ((this.componentListener != null) || ((this.eventMask & 1L) != 0L) || (Toolkit.enabledOnToolkit(1L)))
    {
      ComponentEvent localComponentEvent;
      if (paramBoolean1) {
        localComponentEvent = new ComponentEvent(this, 101);

        Toolkit.getEventQueue().postEvent(localComponentEvent);
      }
      if (paramBoolean2) {
        localComponentEvent = new ComponentEvent(this, 100);

        Toolkit.getEventQueue().postEvent(localComponentEvent);
      }
    }
    else if ((this instanceof Container) && (((Container)this).countComponents() > 0)) {
      boolean bool = Toolkit.enabledOnToolkit(65536L);

      if (paramBoolean1)
      {
        ((Container)this).createChildHierarchyEvents(1402, 0L, bool);
      }

      if (paramBoolean2)
        ((Container)this).createChildHierarchyEvents(1401, 0L, bool);
    }
  }

  public void setBounds(Rectangle paramRectangle)
  {
    setBounds(paramRectangle.x, paramRectangle.y, paramRectangle.width, paramRectangle.height);
  }

  public int getX()
  {
    return this.x;
  }

  public int getY()
  {
    return this.y;
  }

  public int getWidth()
  {
    return this.width;
  }

  public int getHeight()
  {
    return this.height;
  }

  public Rectangle getBounds(Rectangle paramRectangle)
  {
    if (paramRectangle == null) {
      return new Rectangle(getX(), getY(), getWidth(), getHeight());
    }

    paramRectangle.setBounds(getX(), getY(), getWidth(), getHeight());
    return paramRectangle;
  }

  public Dimension getSize(Dimension paramDimension)
  {
    if (paramDimension == null) {
      return new Dimension(getWidth(), getHeight());
    }

    paramDimension.setSize(getWidth(), getHeight());
    return paramDimension;
  }

  public Point getLocation(Point paramPoint)
  {
    if (paramPoint == null) {
      return new Point(getX(), getY());
    }

    paramPoint.setLocation(getX(), getY());
    return paramPoint;
  }

  public boolean isOpaque()
  {
    if (getPeer() == null) {
      return false;
    }

    return (!(isLightweight()));
  }

  public boolean isLightweight()
  {
    return getPeer() instanceof LightweightPeer;
  }

  public void setPreferredSize(Dimension paramDimension)
  {
    Dimension localDimension;
    if (this.prefSizeSet) {
      localDimension = this.prefSize;
    }
    else {
      localDimension = null;
    }
    this.prefSize = paramDimension;
    this.prefSizeSet = (paramDimension != null);
    firePropertyChange("preferredSize", localDimension, paramDimension);
  }

  public boolean isPreferredSizeSet()
  {
    return this.prefSizeSet;
  }

  public Dimension getPreferredSize()
  {
    return preferredSize();
  }

  @Deprecated
  public Dimension preferredSize()
  {
    Dimension localDimension = this.prefSize;
    if ((localDimension == null) || ((!(isPreferredSizeSet())) && (!(isValid())))) {
      synchronized (getTreeLock()) {
        this.prefSize = ((this.peer != null) ? this.peer.preferredSize() : getMinimumSize());

        localDimension = this.prefSize;
      }
    }
    return new Dimension(localDimension);
  }

  public void setMinimumSize(Dimension paramDimension)
  {
    Dimension localDimension;
    if (this.minSizeSet) {
      localDimension = this.minSize;
    }
    else {
      localDimension = null;
    }
    this.minSize = paramDimension;
    this.minSizeSet = (paramDimension != null);
    firePropertyChange("minimumSize", localDimension, paramDimension);
  }

  public boolean isMinimumSizeSet()
  {
    return this.minSizeSet;
  }

  public Dimension getMinimumSize()
  {
    return minimumSize();
  }

  @Deprecated
  public Dimension minimumSize()
  {
    Dimension localDimension = this.minSize;
    if ((localDimension == null) || ((!(isMinimumSizeSet())) && (!(isValid())))) {
      synchronized (getTreeLock()) {
        this.minSize = ((this.peer != null) ? this.peer.minimumSize() : size());

        localDimension = this.minSize;
      }
    }
    return new Dimension(localDimension);
  }

  public void setMaximumSize(Dimension paramDimension)
  {
    Dimension localDimension;
    if (this.maxSizeSet) {
      localDimension = this.maxSize;
    }
    else {
      localDimension = null;
    }
    this.maxSize = paramDimension;
    this.maxSizeSet = (paramDimension != null);
    firePropertyChange("maximumSize", localDimension, paramDimension);
  }

  public boolean isMaximumSizeSet()
  {
    return this.maxSizeSet;
  }

  public Dimension getMaximumSize()
  {
    if (isMaximumSizeSet()) {
      return new Dimension(this.maxSize);
    }
    return new Dimension(32767, 32767);
  }

  public float getAlignmentX()
  {
    return 0.5F;
  }

  public float getAlignmentY()
  {
    return 0.5F;
  }

  public int getBaseline(int paramInt1, int paramInt2)
  {
    if ((paramInt1 < 0) || (paramInt2 < 0)) {
      throw new IllegalArgumentException("Width and height must be >= 0");
    }

    return -1;
  }

  public BaselineResizeBehavior getBaselineResizeBehavior()
  {
    return BaselineResizeBehavior.OTHER;
  }

  public void doLayout()
  {
    layout();
  }

  @Deprecated
  public void layout()
  {
  }

  public void validate()
  {
    if (!(this.valid)) {
      synchronized (getTreeLock()) {
        ComponentPeer localComponentPeer = this.peer;
        if ((!(this.valid)) && (localComponentPeer != null)) {
          Font localFont1 = getFont();
          Font localFont2 = this.peerFont;
          if ((localFont1 != localFont2) && (((localFont2 == null) || (!(localFont2.equals(localFont1))))))
          {
            localComponentPeer.setFont(localFont1);
            this.peerFont = localFont1;
          }
          localComponentPeer.layout();
        }
      }
      this.valid = true;
    }
  }

  public void invalidate()
  {
    synchronized (getTreeLock())
    {
      this.valid = false;
      if (!(isPreferredSizeSet())) {
        this.prefSize = null;
      }
      if (!(isMinimumSizeSet())) {
        this.minSize = null;
      }
      if (!(isMaximumSizeSet())) {
        this.maxSize = null;
      }
      if ((this.parent != null) && (this.parent.valid))
        this.parent.invalidate();
    }
  }

  public Graphics getGraphics()
  {
    if (this.peer instanceof LightweightPeer)
    {
      if (this.parent == null) return null;
      localObject = this.parent.getGraphics();
      if (localObject == null) return null;
      if (localObject instanceof ConstrainableGraphics) {
        ((ConstrainableGraphics)localObject).constrain(this.x, this.y, this.width, this.height);
      } else {
        ((Graphics)localObject).translate(this.x, this.y);
        ((Graphics)localObject).setClip(0, 0, this.width, this.height);
      }
      ((Graphics)localObject).setFont(getFont());
      return localObject;
    }
    Object localObject = this.peer;
    return ((localObject != null) ? ((ComponentPeer)localObject).getGraphics() : (Graphics)null);
  }

  final Graphics getGraphics_NoClientCode()
  {
    ComponentPeer localComponentPeer = this.peer;
    if (localComponentPeer instanceof LightweightPeer)
    {
      Container localContainer = this.parent;
      if (localContainer == null) return null;
      Graphics localGraphics = localContainer.getGraphics_NoClientCode();
      if (localGraphics == null) return null;
      if (localGraphics instanceof ConstrainableGraphics) {
        ((ConstrainableGraphics)localGraphics).constrain(this.x, this.y, this.width, this.height);
      } else {
        localGraphics.translate(this.x, this.y);
        localGraphics.setClip(0, 0, this.width, this.height);
      }
      localGraphics.setFont(getFont_NoClientCode());
      return localGraphics;
    }
    return ((localComponentPeer != null) ? localComponentPeer.getGraphics() : null);
  }

  public FontMetrics getFontMetrics(Font paramFont)
  {
    if ((FontManager.usePlatformFontMetrics()) &&
      (this.peer != null) && (!(this.peer instanceof LightweightPeer)))
    {
      return this.peer.getFontMetrics(paramFont);
    }

    return FontDesignMetrics.getMetrics(paramFont);
  }

  public void setCursor(Cursor paramCursor)
  {
    this.cursor = paramCursor;
    updateCursorImmediately();
  }

  final void updateCursorImmediately()
  {
    if (this.peer instanceof LightweightPeer) {
      Container localContainer = getNativeContainer();

      if (localContainer == null) return;

      ComponentPeer localComponentPeer = localContainer.getPeer();

      if (localComponentPeer != null)
        localComponentPeer.updateCursorImmediately();
    }
    else if (this.peer != null) {
      this.peer.updateCursorImmediately();
    }
  }

  public Cursor getCursor()
  {
    Cursor localCursor = this.cursor;
    if (localCursor != null) {
      return localCursor;
    }
    Container localContainer = this.parent;
    if (localContainer != null) {
      return localContainer.getCursor();
    }
    return Cursor.getPredefinedCursor(0);
  }

  public boolean isCursorSet()
  {
    return (this.cursor != null);
  }

  public void paint(Graphics paramGraphics)
  {
  }

  public void update(Graphics paramGraphics)
  {
    paint(paramGraphics);
  }

  public void paintAll(Graphics paramGraphics)
  {
    if (isShowing())
      GraphicsCallback.PeerPaintCallback.getInstance().runOneComponent(this, new Rectangle(0, 0, this.width, this.height), paramGraphics, paramGraphics.getClip(), 3);
  }

  void lightweightPaint(Graphics paramGraphics)
  {
    paint(paramGraphics);
  }

  void paintHeavyweightComponents(Graphics paramGraphics)
  {
  }

  public void repaint()
  {
    repaint(0L, 0, 0, this.width, this.height);
  }

  public void repaint(long paramLong)
  {
    repaint(paramLong, 0, 0, this.width, this.height);
  }

  public void repaint(int paramInt1, int paramInt2, int paramInt3, int paramInt4)
  {
    repaint(0L, paramInt1, paramInt2, paramInt3, paramInt4);
  }

  public void repaint(long paramLong, int paramInt1, int paramInt2, int paramInt3, int paramInt4)
  {
    if (this.peer instanceof LightweightPeer)
    {
      if (this.parent != null) {
        int i = this.x + ((paramInt1 < 0) ? 0 : paramInt1);
        int j = this.y + ((paramInt2 < 0) ? 0 : paramInt2);
        int k = (paramInt3 > this.width) ? this.width : paramInt3;
        int l = (paramInt4 > this.height) ? this.height : paramInt4;
        this.parent.repaint(paramLong, i, j, k, l);
      }
    } else {
      if ((!(isVisible())) || (this.peer == null) || (paramInt3 <= 0) || (paramInt4 <= 0))
        return;
      PaintEvent localPaintEvent = new PaintEvent(this, 801, new Rectangle(paramInt1, paramInt2, paramInt3, paramInt4));

      Toolkit.getEventQueue().postEvent(localPaintEvent);
    }
  }

  public void print(Graphics paramGraphics)
  {
    paint(paramGraphics);
  }

  public void printAll(Graphics paramGraphics)
  {
    if (isShowing())
      GraphicsCallback.PeerPrintCallback.getInstance().runOneComponent(this, new Rectangle(0, 0, this.width, this.height), paramGraphics, paramGraphics.getClip(), 3);
  }

  void lightweightPrint(Graphics paramGraphics)
  {
    print(paramGraphics);
  }

  void printHeavyweightComponents(Graphics paramGraphics)
  {
  }

  private Insets getInsets_NoClientCode()
  {
    ComponentPeer localComponentPeer = this.peer;
    if (localComponentPeer instanceof ContainerPeer) {
      return ((Insets)((ContainerPeer)localComponentPeer).insets().clone());
    }
    return new Insets(0, 0, 0, 0);
  }

  public boolean imageUpdate(Image paramImage, int paramInt1, int paramInt2, int paramInt3, int paramInt4, int paramInt5)
  {
    int i = -1;
    if ((paramInt1 & 0x30) != 0) {
      i = 0;
    } else if (((paramInt1 & 0x8) != 0) &&
      (isInc)) {
      i = incRate;
      if (i < 0) {
        i = 0;
      }
    }

    if (i >= 0) {
      repaint(i, 0, 0, this.width, this.height);
    }
    return ((paramInt1 & 0xA0) == 0);
  }

  public Image createImage(ImageProducer paramImageProducer)
  {
    ComponentPeer localComponentPeer = this.peer;
    if ((localComponentPeer != null) && (!(localComponentPeer instanceof LightweightPeer))) {
      return localComponentPeer.createImage(paramImageProducer);
    }
    return getToolkit().createImage(paramImageProducer);
  }

  public Image createImage(int paramInt1, int paramInt2)
  {
    ComponentPeer localComponentPeer = this.peer;
    if (localComponentPeer instanceof LightweightPeer) {
      if (this.parent != null) return this.parent.createImage(paramInt1, paramInt2);
      return null;
    }
    return ((localComponentPeer != null) ? localComponentPeer.createImage(paramInt1, paramInt2) : null);
  }

  public VolatileImage createVolatileImage(int paramInt1, int paramInt2)
  {
    ComponentPeer localComponentPeer = this.peer;
    if (localComponentPeer instanceof LightweightPeer) {
      if (this.parent != null) {
        return this.parent.createVolatileImage(paramInt1, paramInt2);
      }
      return null;
    }
    return ((localComponentPeer != null) ? localComponentPeer.createVolatileImage(paramInt1, paramInt2) : null);
  }

  public VolatileImage createVolatileImage(int paramInt1, int paramInt2, ImageCapabilities paramImageCapabilities)
    throws AWTException
  {
    return createVolatileImage(paramInt1, paramInt2);
  }

  public boolean prepareImage(Image paramImage, ImageObserver paramImageObserver)
  {
    return prepareImage(paramImage, -1, -1, paramImageObserver);
  }

  public boolean prepareImage(Image paramImage, int paramInt1, int paramInt2, ImageObserver paramImageObserver)
  {
    ComponentPeer localComponentPeer = this.peer;
    if (localComponentPeer instanceof LightweightPeer) {
      return ((this.parent != null) ? this.parent.prepareImage(paramImage, paramInt1, paramInt2, paramImageObserver) : getToolkit().prepareImage(paramImage, paramInt1, paramInt2, paramImageObserver));
    }

    return ((localComponentPeer != null) ? localComponentPeer.prepareImage(paramImage, paramInt1, paramInt2, paramImageObserver) : getToolkit().prepareImage(paramImage, paramInt1, paramInt2, paramImageObserver));
  }

  public int checkImage(Image paramImage, ImageObserver paramImageObserver)
  {
    return checkImage(paramImage, -1, -1, paramImageObserver);
  }

  public int checkImage(Image paramImage, int paramInt1, int paramInt2, ImageObserver paramImageObserver)
  {
    ComponentPeer localComponentPeer = this.peer;
    if (localComponentPeer instanceof LightweightPeer) {
      return ((this.parent != null) ? this.parent.checkImage(paramImage, paramInt1, paramInt2, paramImageObserver) : getToolkit().checkImage(paramImage, paramInt1, paramInt2, paramImageObserver));
    }

    return ((localComponentPeer != null) ? localComponentPeer.checkImage(paramImage, paramInt1, paramInt2, paramImageObserver) : getToolkit().checkImage(paramImage, paramInt1, paramInt2, paramImageObserver));
  }

  void createBufferStrategy(int paramInt)
  {
    BufferCapabilities localBufferCapabilities;
    if (paramInt > 1)
    {
      localBufferCapabilities = new BufferCapabilities(new ImageCapabilities(true), new ImageCapabilities(true), BufferCapabilities.FlipContents.UNDEFINED);
    }
    try
    {
      createBufferStrategy(paramInt, localBufferCapabilities);
      return;
    }
    catch (AWTException localAWTException3)
    {
      localBufferCapabilities = new BufferCapabilities(new ImageCapabilities(true), new ImageCapabilities(true), null);
      try
      {
        createBufferStrategy(paramInt, localBufferCapabilities);
        return;
      }
      catch (AWTException localAWTException3)
      {
        localBufferCapabilities = new BufferCapabilities(new ImageCapabilities(false), new ImageCapabilities(false), null);
        try
        {
          createBufferStrategy(paramInt, localBufferCapabilities);
          return;
        }
        catch (AWTException localAWTException3)
        {
          throw new InternalError("Could not create a buffer strategy");
        }
      }
    }
  }

  void createBufferStrategy(int paramInt, BufferCapabilities paramBufferCapabilities)
    throws AWTException
  {
    if (paramInt < 1) {
      throw new IllegalArgumentException("Number of buffers must be at least 1");
    }

    if (paramBufferCapabilities == null) {
      throw new IllegalArgumentException("No capabilities specified");
    }

    if (this.bufferStrategy != null) {
      this.bufferStrategy.dispose();
    }
    if (paramInt == 1) {
      this.bufferStrategy = new SingleBufferStrategy(paramBufferCapabilities);
    } else {
      SunGraphicsEnvironment localSunGraphicsEnvironment = (SunGraphicsEnvironment)GraphicsEnvironment.getLocalGraphicsEnvironment();

      if ((!(paramBufferCapabilities.isPageFlipping())) && (localSunGraphicsEnvironment.isFlipStrategyPreferred(this.peer))) {
        paramBufferCapabilities = new ProxyCapabilities(paramBufferCapabilities, null);
      }

      if (paramBufferCapabilities.isPageFlipping())
        this.bufferStrategy = new FlipSubRegionBufferStrategy(paramInt, paramBufferCapabilities);
      else
        this.bufferStrategy = new BltSubRegionBufferStrategy(paramInt, paramBufferCapabilities);
    }
  }

  BufferStrategy getBufferStrategy()
  {
    return this.bufferStrategy;
  }

  Image getBackBuffer()
  {
    if (this.bufferStrategy != null) {
      Object localObject;
      if (this.bufferStrategy instanceof BltBufferStrategy) {
        localObject = (BltBufferStrategy)this.bufferStrategy;
        return ((BltBufferStrategy)localObject).getBackBuffer(); }
      if (this.bufferStrategy instanceof FlipBufferStrategy) {
        localObject = (FlipBufferStrategy)this.bufferStrategy;
        return ((FlipBufferStrategy)localObject).getBackBuffer();
      }
    }
    return ((Image)null);
  }

  public void setIgnoreRepaint(boolean paramBoolean)
  {
    this.ignoreRepaint = paramBoolean;
  }

  public boolean getIgnoreRepaint()
  {
    return this.ignoreRepaint;
  }

  public boolean contains(int paramInt1, int paramInt2)
  {
    return inside(paramInt1, paramInt2);
  }

  @Deprecated
  public boolean inside(int paramInt1, int paramInt2)
  {
    return ((paramInt1 >= 0) && (paramInt1 < this.width) && (paramInt2 >= 0) && (paramInt2 < this.height));
  }

  public boolean contains(Point paramPoint)
  {
    return contains(paramPoint.x, paramPoint.y);
  }

  public Component getComponentAt(int paramInt1, int paramInt2)
  {
    return locate(paramInt1, paramInt2);
  }

  @Deprecated
  public Component locate(int paramInt1, int paramInt2)
  {
    return ((contains(paramInt1, paramInt2)) ? this : null);
  }

  public Component getComponentAt(Point paramPoint)
  {
    return getComponentAt(paramPoint.x, paramPoint.y);
  }

  @Deprecated
  public void deliverEvent(Event paramEvent)
  {
    postEvent(paramEvent);
  }

  public final void dispatchEvent(AWTEvent paramAWTEvent)
  {
    dispatchEventImpl(paramAWTEvent);
  }

  void dispatchEventImpl(AWTEvent paramAWTEvent) {
    int i = paramAWTEvent.getID();

    AppContext localAppContext = this.appContext;
    if ((localAppContext != null) && (!(localAppContext.equals(AppContext.getAppContext())))) {
      log.fine("Event " + paramAWTEvent + " is being dispatched on the wrong AppContext");
    }

    if (log.isLoggable(Level.FINEST)) {
      log.log(Level.FINEST, "{0}", paramAWTEvent);
    }

    EventQueue.setCurrentEventAndMostRecentTime(paramAWTEvent);

    if (paramAWTEvent instanceof SunDropTargetEvent) {
      ((SunDropTargetEvent)paramAWTEvent).dispatch();
      return;
    }

    if (!(paramAWTEvent.focusManagerIsDispatching))
    {
      if (paramAWTEvent.isPosted) {
        paramAWTEvent = KeyboardFocusManager.retargetFocusEvent(paramAWTEvent);
        paramAWTEvent.isPosted = true;
      }

      if (KeyboardFocusManager.getCurrentKeyboardFocusManager().dispatchEvent(paramAWTEvent))
      {
        return;
      }
    }
    if ((paramAWTEvent instanceof FocusEvent) && (focusLog.isLoggable(Level.FINE))) {
      focusLog.fine("" + paramAWTEvent);
    }

    if ((i == 507) && (!(eventTypeEnabled(i))) && (this.peer != null) && (!(this.peer.handlesWheelScrolling())) && (dispatchMouseWheelToAncestor((MouseWheelEvent)paramAWTEvent)))
    {
      return;
    }

    Toolkit localToolkit = Toolkit.getDefaultToolkit();
    localToolkit.notifyAWTEventListeners(paramAWTEvent);

    if ((!(paramAWTEvent.isConsumed())) &&
      (paramAWTEvent instanceof KeyEvent)) {
      KeyboardFocusManager.getCurrentKeyboardFocusManager().processKeyEvent(this, (KeyEvent)paramAWTEvent);

      if (paramAWTEvent.isConsumed())
        return;
    }
    Object localObject;
    if (areInputMethodsEnabled())
    {
      if (((paramAWTEvent instanceof InputMethodEvent) && (!(this instanceof CompositionArea))) || (paramAWTEvent instanceof InputEvent) || (paramAWTEvent instanceof FocusEvent))
      {
        localObject = getInputContext();

        if (localObject != null) {
          ((java.awt.im.InputContext)localObject).dispatchEvent(paramAWTEvent);
          if (paramAWTEvent.isConsumed()) {
            if ((paramAWTEvent instanceof FocusEvent) && (focusLog.isLoggable(Level.FINER))) {
              focusLog.finer("3579: Skipping " + paramAWTEvent);
            }
            return;
          }

        }

      }

    }
    else if (i == 1004) {
      localObject = getInputContext();
      if ((localObject != null) && (localObject instanceof sun.awt.im.InputContext)) {
        ((sun.awt.im.InputContext)localObject).disableNativeIM();
      }

    }

    switch (i)
    {
    case 401:
    case 402:
      localObject = (Container)((this instanceof Container) ? this : this.parent);
      if (localObject != null) {
        ((Container)localObject).preProcessKeyEvent((KeyEvent)paramAWTEvent);
        if (paramAWTEvent.isConsumed()) {
          if (focusLog.isLoggable(Level.FINEST)) focusLog.finest("Pre-process consumed event");
          return;
        }

      }

    case 201:
      if (localToolkit instanceof WindowClosingListener) {
        this.windowClosingException = ((WindowClosingListener)localToolkit).windowClosingNotify((WindowEvent)paramAWTEvent);

        if (checkWindowClosingException()) {
          return;
        }

      }

    }

    if (this.newEventsOnly)
    {
      if (eventEnabled(paramAWTEvent))
        processEvent(paramAWTEvent);
    }
    else if (i == 507)
    {
      autoProcessMouseWheel((MouseWheelEvent)paramAWTEvent);
    } else if ((!(paramAWTEvent instanceof MouseEvent)) || (postsOldMouseEvents()))
    {
      localObject = paramAWTEvent.convertToOld();
      if (localObject != null) {
        int j = ((Event)localObject).key;
        int k = ((Event)localObject).modifiers;

        postEvent((Event)localObject);
        if (((Event)localObject).isConsumed()) {
          paramAWTEvent.consume();
        }

        switch (((Event)localObject).id)
        {
        case 401:
        case 402:
        case 403:
        case 404:
          if (((Event)localObject).key != j) {
            ((KeyEvent)paramAWTEvent).setKeyChar(((Event)localObject).getKeyEventChar());
          }
          if (((Event)localObject).modifiers != k) {
            ((KeyEvent)paramAWTEvent).setModifiers(((Event)localObject).modifiers);
          }

        }

      }

    }

    if ((i == 201) && (!(paramAWTEvent.isConsumed())) &&
      (localToolkit instanceof WindowClosingListener)) {
      this.windowClosingException = ((WindowClosingListener)localToolkit).windowClosingDelivered((WindowEvent)paramAWTEvent);

      if (checkWindowClosingException()) {
        return;
      }

    }

    if (!(paramAWTEvent instanceof KeyEvent)) {
      localObject = this.peer;
      if ((paramAWTEvent instanceof FocusEvent) && (((localObject == null) || (localObject instanceof LightweightPeer))))
      {
        Component localComponent = (Component)paramAWTEvent.getSource();
        if (localComponent != null) {
          Container localContainer = localComponent.getNativeContainer();
          if (localContainer != null) {
            localObject = localContainer.getPeer();
          }
        }
      }
      if (localObject != null)
        ((ComponentPeer)localObject).handleEvent(paramAWTEvent);
    }
  }

  void autoProcessMouseWheel(MouseWheelEvent paramMouseWheelEvent)
  {
  }

  boolean dispatchMouseWheelToAncestor(MouseWheelEvent paramMouseWheelEvent)
  {
    int i = paramMouseWheelEvent.getX() + getX();
    int j = paramMouseWheelEvent.getY() + getY();

    synchronized (getTreeLock()) {
      Container localContainer = getParent();
      while ((localContainer != null) && (!(localContainer.eventEnabled(paramMouseWheelEvent))))
      {
        i += localContainer.getX();
        j += localContainer.getY();

        if (localContainer instanceof Window) break;
        localContainer = localContainer.getParent();
      }

      if ((localContainer != null) && (localContainer.eventEnabled(paramMouseWheelEvent)))
      {
        MouseWheelEvent localMouseWheelEvent = new MouseWheelEvent(localContainer, paramMouseWheelEvent.getID(), paramMouseWheelEvent.getWhen(), paramMouseWheelEvent.getModifiers(), i, j, paramMouseWheelEvent.getXOnScreen(), paramMouseWheelEvent.getYOnScreen(), paramMouseWheelEvent.getClickCount(), paramMouseWheelEvent.isPopupTrigger(), paramMouseWheelEvent.getScrollType(), paramMouseWheelEvent.getScrollAmount(), paramMouseWheelEvent.getWheelRotation());

        paramMouseWheelEvent.copyPrivateDataInto(localMouseWheelEvent);

        localContainer.dispatchEventToSelf(localMouseWheelEvent);
      }
    }
    return true;
  }

  boolean checkWindowClosingException() {
    if (this.windowClosingException != null) {
      if (this instanceof Dialog) {
        ((Dialog)this).interruptBlocking();
      } else {
        this.windowClosingException.fillInStackTrace();
        this.windowClosingException.printStackTrace();
        this.windowClosingException = null;
      }
      return true;
    }
    return false;
  }

  boolean areInputMethodsEnabled()
  {
    return (((this.eventMask & 0x1000) != 0L) && ((((this.eventMask & 0x8) != 0L) || (this.keyListener != null))));
  }

  boolean eventEnabled(AWTEvent paramAWTEvent)
  {
    return eventTypeEnabled(paramAWTEvent.id);
  }

  boolean eventTypeEnabled(int paramInt) {
    switch (paramInt)
    {
    case 100:
    case 101:
    case 102:
    case 103:
      if (((this.eventMask & 1L) != 0L) || (this.componentListener != null))
      {
        return true;
      }
    case 1004:
    case 1005:
      if (((this.eventMask & 0x4) != 0L) || (this.focusListener != null))
      {
        return true;
      }
    case 400:
    case 401:
    case 402:
      if (((this.eventMask & 0x8) != 0L) || (this.keyListener != null))
      {
        return true;
      }
    case 500:
    case 501:
    case 502:
    case 504:
    case 505:
      if (((this.eventMask & 0x10) != 0L) || (this.mouseListener != null))
      {
        return true;
      }
    case 503:
    case 506:
      if (((this.eventMask & 0x20) != 0L) || (this.mouseMotionListener != null))
      {
        return true;
      }
    case 507:
      if (((this.eventMask & 0x20000) != 0L) || (this.mouseWheelListener != null))
      {
        return true;
      }
    case 1100:
    case 1101:
      if (((this.eventMask & 0x800) != 0L) || (this.inputMethodListener != null))
      {
        return true;
      }
    case 1400:
      if (((this.eventMask & 0x8000) != 0L) || (this.hierarchyListener != null))
      {
        return true;
      }
    case 1401:
    case 1402:
      if (((this.eventMask & 0x10000) != 0L) || (this.hierarchyBoundsListener != null))
      {
        return true;
      }
    case 1001:
      if ((this.eventMask & 0x80) != 0L)
        return true;
    case 900:
      if ((this.eventMask & 0x400) != 0L)
        return true;
    case 701:
      if ((this.eventMask & 0x200) != 0L)
        return true;
    case 601:
      if ((this.eventMask & 0x100) != 0L) {
        return true;
      }

    }

    return (paramInt > 1999);
  }

  @Deprecated
  public boolean postEvent(Event paramEvent)
  {
    ComponentPeer localComponentPeer = this.peer;

    if (handleEvent(paramEvent)) {
      paramEvent.consume();
      return true;
    }

    Container localContainer = this.parent;
    int i = paramEvent.x;
    int j = paramEvent.y;
    if (localContainer != null) {
      paramEvent.translate(this.x, this.y);
      if (localContainer.postEvent(paramEvent)) {
        paramEvent.consume();
        return true;
      }

      paramEvent.x = i;
      paramEvent.y = j;
    }
    return false;
  }

  public synchronized void addComponentListener(ComponentListener paramComponentListener)
  {
    if (paramComponentListener == null) {
      return;
    }
    this.componentListener = AWTEventMulticaster.add(this.componentListener, paramComponentListener);
    this.newEventsOnly = true;
  }

  public synchronized void removeComponentListener(ComponentListener paramComponentListener)
  {
    if (paramComponentListener == null) {
      return;
    }
    this.componentListener = AWTEventMulticaster.remove(this.componentListener, paramComponentListener);
  }

  public synchronized ComponentListener[] getComponentListeners()
  {
    return ((ComponentListener[])(ComponentListener[])getListeners(ComponentListener.class));
  }

  public synchronized void addFocusListener(FocusListener paramFocusListener)
  {
    if (paramFocusListener == null) {
      return;
    }
    this.focusListener = AWTEventMulticaster.add(this.focusListener, paramFocusListener);
    this.newEventsOnly = true;

    if (this.peer instanceof LightweightPeer)
      this.parent.proxyEnableEvents(4L);
  }

  public synchronized void removeFocusListener(FocusListener paramFocusListener)
  {
    if (paramFocusListener == null) {
      return;
    }
    this.focusListener = AWTEventMulticaster.remove(this.focusListener, paramFocusListener);
  }

  public synchronized FocusListener[] getFocusListeners()
  {
    return ((FocusListener[])(FocusListener[])getListeners(FocusListener.class));
  }

  public void addHierarchyListener(HierarchyListener paramHierarchyListener)
  {
    if (paramHierarchyListener == null)
      return;
    int i;
    synchronized (this) {
      i = ((this.hierarchyListener == null) && ((this.eventMask & 0x8000) == 0L)) ? 1 : 0;

      this.hierarchyListener = AWTEventMulticaster.add(this.hierarchyListener, paramHierarchyListener);
      i = ((i != 0) && (this.hierarchyListener != null)) ? 1 : 0;
      this.newEventsOnly = true;
    }
    if (i != 0)
      synchronized (getTreeLock()) {
        adjustListeningChildrenOnParent(32768L, 1);
      }
  }

  public void removeHierarchyListener(HierarchyListener paramHierarchyListener)
  {
    if (paramHierarchyListener == null)
      return;
    int i;
    synchronized (this) {
      i = ((this.hierarchyListener != null) && ((this.eventMask & 0x8000) == 0L)) ? 1 : 0;

      this.hierarchyListener = AWTEventMulticaster.remove(this.hierarchyListener, paramHierarchyListener);

      i = ((i != 0) && (this.hierarchyListener == null)) ? 1 : 0;
    }
    if (i != 0)
      synchronized (getTreeLock()) {
        adjustListeningChildrenOnParent(32768L, -1);
      }
  }

  public synchronized HierarchyListener[] getHierarchyListeners()
  {
    return ((HierarchyListener[])(HierarchyListener[])getListeners(HierarchyListener.class));
  }

  public void addHierarchyBoundsListener(HierarchyBoundsListener paramHierarchyBoundsListener)
  {
    if (paramHierarchyBoundsListener == null)
      return;
    int i;
    synchronized (this) {
      i = ((this.hierarchyBoundsListener == null) && ((this.eventMask & 0x10000) == 0L)) ? 1 : 0;

      this.hierarchyBoundsListener = AWTEventMulticaster.add(this.hierarchyBoundsListener, paramHierarchyBoundsListener);

      i = ((i != 0) && (this.hierarchyBoundsListener != null)) ? 1 : 0;

      this.newEventsOnly = true;
    }
    if (i != 0)
      synchronized (getTreeLock()) {
        adjustListeningChildrenOnParent(65536L, 1);
      }
  }

  public void removeHierarchyBoundsListener(HierarchyBoundsListener paramHierarchyBoundsListener)
  {
    if (paramHierarchyBoundsListener == null)
      return;
    int i;
    synchronized (this) {
      i = ((this.hierarchyBoundsListener != null) && ((this.eventMask & 0x10000) == 0L)) ? 1 : 0;

      this.hierarchyBoundsListener = AWTEventMulticaster.remove(this.hierarchyBoundsListener, paramHierarchyBoundsListener);

      i = ((i != 0) && (this.hierarchyBoundsListener == null)) ? 1 : 0;
    }

    if (i != 0)
      synchronized (getTreeLock()) {
        adjustListeningChildrenOnParent(65536L, -1);
      }
  }

  int numListening(long paramLong)
  {
    if (((paramLong == 32768L) && (((this.hierarchyListener != null) || ((this.eventMask & 0x8000) != 0L)))) || ((paramLong == 65536L) && (((this.hierarchyBoundsListener != null) || ((this.eventMask & 0x10000) != 0L)))))
    {
      return 1;
    }
    return 0;
  }

  int countHierarchyMembers()
  {
    return 1;
  }

  int createHierarchyEvents(int paramInt, Component paramComponent, Container paramContainer, long paramLong, boolean paramBoolean)
  {
    HierarchyEvent localHierarchyEvent;
    switch (paramInt)
    {
    case 1400:
      if ((this.hierarchyListener == null) && ((this.eventMask & 0x8000) == 0L) && (!(paramBoolean))) {
        break label130;
      }
      localHierarchyEvent = new HierarchyEvent(this, paramInt, paramComponent, paramContainer, paramLong);

      dispatchEvent(localHierarchyEvent);
      return 1;
    case 1401:
    case 1402:
      if ((this.hierarchyBoundsListener == null) && ((this.eventMask & 0x10000) == 0L) && (!(paramBoolean))) {
        break label130;
      }
      localHierarchyEvent = new HierarchyEvent(this, paramInt, paramComponent, paramContainer);

      dispatchEvent(localHierarchyEvent);
      return 1;
    }

    label130: return 0;
  }

  public synchronized HierarchyBoundsListener[] getHierarchyBoundsListeners()
  {
    return ((HierarchyBoundsListener[])(HierarchyBoundsListener[])getListeners(HierarchyBoundsListener.class));
  }

  void adjustListeningChildrenOnParent(long paramLong, int paramInt)
  {
    if (this.parent != null)
      this.parent.adjustListeningChildren(paramLong, paramInt);
  }

  public synchronized void addKeyListener(KeyListener paramKeyListener)
  {
    if (paramKeyListener == null) {
      return;
    }
    this.keyListener = AWTEventMulticaster.add(this.keyListener, paramKeyListener);
    this.newEventsOnly = true;

    if (this.peer instanceof LightweightPeer)
      this.parent.proxyEnableEvents(8L);
  }

  public synchronized void removeKeyListener(KeyListener paramKeyListener)
  {
    if (paramKeyListener == null) {
      return;
    }
    this.keyListener = AWTEventMulticaster.remove(this.keyListener, paramKeyListener);
  }

  public synchronized KeyListener[] getKeyListeners()
  {
    return ((KeyListener[])(KeyListener[])getListeners(KeyListener.class));
  }

  public synchronized void addMouseListener(MouseListener paramMouseListener)
  {
    if (paramMouseListener == null) {
      return;
    }
    this.mouseListener = AWTEventMulticaster.add(this.mouseListener, paramMouseListener);
    this.newEventsOnly = true;

    if (this.peer instanceof LightweightPeer)
      this.parent.proxyEnableEvents(16L);
  }

  public synchronized void removeMouseListener(MouseListener paramMouseListener)
  {
    if (paramMouseListener == null) {
      return;
    }
    this.mouseListener = AWTEventMulticaster.remove(this.mouseListener, paramMouseListener);
  }

  public synchronized MouseListener[] getMouseListeners()
  {
    return ((MouseListener[])(MouseListener[])getListeners(MouseListener.class));
  }

  public synchronized void addMouseMotionListener(MouseMotionListener paramMouseMotionListener)
  {
    if (paramMouseMotionListener == null) {
      return;
    }
    this.mouseMotionListener = AWTEventMulticaster.add(this.mouseMotionListener, paramMouseMotionListener);
    this.newEventsOnly = true;

    if (this.peer instanceof LightweightPeer)
      this.parent.proxyEnableEvents(32L);
  }

  public synchronized void removeMouseMotionListener(MouseMotionListener paramMouseMotionListener)
  {
    if (paramMouseMotionListener == null) {
      return;
    }
    this.mouseMotionListener = AWTEventMulticaster.remove(this.mouseMotionListener, paramMouseMotionListener);
  }

  public synchronized MouseMotionListener[] getMouseMotionListeners()
  {
    return ((MouseMotionListener[])(MouseMotionListener[])getListeners(MouseMotionListener.class));
  }

  public synchronized void addMouseWheelListener(MouseWheelListener paramMouseWheelListener)
  {
    if (paramMouseWheelListener == null) {
      return;
    }
    this.mouseWheelListener = AWTEventMulticaster.add(this.mouseWheelListener, paramMouseWheelListener);
    this.newEventsOnly = true;

    dbg.println("Component.addMouseWheelListener(): newEventsOnly = " + this.newEventsOnly);

    if (this.peer instanceof LightweightPeer)
      this.parent.proxyEnableEvents(131072L);
  }

  public synchronized void removeMouseWheelListener(MouseWheelListener paramMouseWheelListener)
  {
    if (paramMouseWheelListener == null) {
      return;
    }
    this.mouseWheelListener = AWTEventMulticaster.remove(this.mouseWheelListener, paramMouseWheelListener);
  }

  public synchronized MouseWheelListener[] getMouseWheelListeners()
  {
    return ((MouseWheelListener[])(MouseWheelListener[])getListeners(MouseWheelListener.class));
  }

  public synchronized void addInputMethodListener(InputMethodListener paramInputMethodListener)
  {
    if (paramInputMethodListener == null) {
      return;
    }
    this.inputMethodListener = AWTEventMulticaster.add(this.inputMethodListener, paramInputMethodListener);
    this.newEventsOnly = true;
  }

  public synchronized void removeInputMethodListener(InputMethodListener paramInputMethodListener)
  {
    if (paramInputMethodListener == null) {
      return;
    }
    this.inputMethodListener = AWTEventMulticaster.remove(this.inputMethodListener, paramInputMethodListener);
  }

  public synchronized InputMethodListener[] getInputMethodListeners()
  {
    return ((InputMethodListener[])(InputMethodListener[])getListeners(InputMethodListener.class));
  }

  public T[] getListeners(Class paramClass)
  {
    Object localObject = null;
    if (paramClass == ComponentListener.class)
      localObject = this.componentListener;
    else if (paramClass == FocusListener.class)
      localObject = this.focusListener;
    else if (paramClass == HierarchyListener.class)
      localObject = this.hierarchyListener;
    else if (paramClass == HierarchyBoundsListener.class)
      localObject = this.hierarchyBoundsListener;
    else if (paramClass == KeyListener.class)
      localObject = this.keyListener;
    else if (paramClass == MouseListener.class)
      localObject = this.mouseListener;
    else if (paramClass == MouseMotionListener.class)
      localObject = this.mouseMotionListener;
    else if (paramClass == MouseWheelListener.class)
      localObject = this.mouseWheelListener;
    else if (paramClass == InputMethodListener.class)
      localObject = this.inputMethodListener;
    else if (paramClass == PropertyChangeListener.class) {
      return ((EventListener[])getPropertyChangeListeners());
    }
    return ((TT)AWTEventMulticaster.getListeners((EventListener)localObject, paramClass));
  }

  public InputMethodRequests getInputMethodRequests()
  {
    return null;
  }

  public java.awt.im.InputContext getInputContext()
  {
    Container localContainer = this.parent;
    if (localContainer == null) {
      return null;
    }
    return localContainer.getInputContext();
  }

  protected final void enableEvents(long paramLong)
  {
    long l = 0L;
    synchronized (this) {
      if (((paramLong & 0x8000) != 0L) && (this.hierarchyListener == null) && ((this.eventMask & 0x8000) == 0L))
      {
        l |= 32768L;
      }
      if (((paramLong & 0x10000) != 0L) && (this.hierarchyBoundsListener == null) && ((this.eventMask & 0x10000) == 0L))
      {
        l |= 65536L;
      }
      this.eventMask |= paramLong;
      this.newEventsOnly = true;
    }

    if (this.peer instanceof LightweightPeer) {
      this.parent.proxyEnableEvents(this.eventMask);
    }
    if (l != 0L)
      synchronized (getTreeLock()) {
        adjustListeningChildrenOnParent(l, 1);
      }
  }

  protected final void disableEvents(long paramLong)
  {
    long l = 0L;
    synchronized (this) {
      if (((paramLong & 0x8000) != 0L) && (this.hierarchyListener == null) && ((this.eventMask & 0x8000) != 0L))
      {
        l |= 32768L;
      }
      if (((paramLong & 0x10000) != 0L) && (this.hierarchyBoundsListener == null) && ((this.eventMask & 0x10000) != 0L))
      {
        l |= 65536L;
      }
      this.eventMask &= (paramLong ^ 0xFFFFFFFF);
    }
    if (l != 0L)
      synchronized (getTreeLock()) {
        adjustListeningChildrenOnParent(l, -1);
      }
  }

  private boolean checkCoalescing()
  {
    if (super.getClass().getClassLoader() == null) {
      return false;
    }
    Class localClass = super.getClass();
    synchronized (coalesceMap)
    {
      Boolean localBoolean1 = (Boolean)coalesceMap.get(localClass);
      if (localBoolean1 != null) {
        return localBoolean1.booleanValue();
      }

      Boolean localBoolean2 = (Boolean)AccessController.doPrivileged(new PrivilegedAction(localClass)
      {
        public Boolean run() {
          return Boolean.valueOf(Component.access$300(this.val$clazz));
        }
      });
      coalesceMap.put(localClass, localBoolean2);
      return localBoolean2.booleanValue();
    }
  }

  private static boolean isCoalesceEventsOverriden(Class

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有