⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 repaintmanager.java

📁 gcc的组建
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
   * event queue.   *   * @param component The component to add   *   * @see #removeInvalidComponent   */  public synchronized void addInvalidComponent(JComponent component)  {    Component ancestor = component.getParent();    while (ancestor != null           && (! (ancestor instanceof JComponent)               || ! ((JComponent) ancestor).isValidateRoot() ))      ancestor = ancestor.getParent();    if (ancestor != null        && ancestor instanceof JComponent        && ((JComponent) ancestor).isValidateRoot())      component = (JComponent) ancestor;    if (invalidComponents.contains(component))      return;    invalidComponents.add(component);        if (! repaintWorker.isLive())      {        repaintWorker.setLive(true);        SwingUtilities.invokeLater(repaintWorker);      }  }  /**   * Remove a component from the {@link #invalidComponents} vector.   *   * @param component The component to remove   *   * @see #addInvalidComponent   */  public synchronized void removeInvalidComponent(JComponent component)  {    invalidComponents.remove(component);  }  /**   * Add a region to the set of dirty regions for a specified component.   * This involves union'ing the new region with any existing dirty region   * associated with the component. If the {@link #repaintWorker} class   * is not active, insert it in the system event queue.   *   * @param component The component to add a dirty region for   * @param x The left x coordinate of the new dirty region   * @param y The top y coordinate of the new dirty region   * @param w The width of the new dirty region   * @param h The height of the new dirty region   *   * @see #addDirtyRegion   * @see #getDirtyRegion   * @see #isCompletelyDirty   * @see #markCompletelyClean   * @see #markCompletelyDirty   */  public synchronized void addDirtyRegion(JComponent component, int x, int y,                                          int w, int h)  {    if (w == 0 || h == 0 || !component.isShowing())      return;    Rectangle r = new Rectangle(x, y, w, h);    if (dirtyComponents.containsKey(component))      r = r.union((Rectangle)dirtyComponents.get(component));    else      insertInRepaintOrder(component);    dirtyComponents.put(component, r);    if (! repaintWorker.isLive())      {        repaintWorker.setLive(true);        SwingUtilities.invokeLater(repaintWorker);      }  }  /**   * Inserts a component into the repaintOrder list in an ordered fashion,   * using a binary search.   *   * @param c the component to be inserted   */  private void insertInRepaintOrder(JComponent c)  {    if (comparator == null)      comparator = new ComponentComparator();    int insertIndex = Collections.binarySearch(repaintOrder, c, comparator);    if (insertIndex < 0)      insertIndex = -(insertIndex + 1);    repaintOrder.add(insertIndex, c);  }  /**   * Get the dirty region associated with a component, or <code>null</code>   * if the component has no dirty region.   *   * @param component The component to get the dirty region of   *   * @return The dirty region of the component   *   * @see #dirtyComponents   * @see #addDirtyRegion   * @see #isCompletelyDirty   * @see #markCompletelyClean   * @see #markCompletelyDirty   */  public Rectangle getDirtyRegion(JComponent component)  {    Rectangle dirty = (Rectangle) dirtyComponents.get(component);    if (dirty == null)      dirty = new Rectangle();    return dirty;  }    /**   * Mark a component as dirty over its entire bounds.   *   * @param component The component to mark as dirty   *   * @see #dirtyComponents   * @see #addDirtyRegion   * @see #getDirtyRegion   * @see #isCompletelyDirty   * @see #markCompletelyClean   */  public void markCompletelyDirty(JComponent component)  {    Rectangle r = component.getBounds();    addDirtyRegion(component, r.x, r.y, r.width, r.height);    component.isCompletelyDirty = true;  }  /**   * Remove all dirty regions for a specified component   *   * @param component The component to mark as clean   *   * @see #dirtyComponents   * @see #addDirtyRegion   * @see #getDirtyRegion   * @see #isCompletelyDirty   * @see #markCompletelyDirty   */  public void markCompletelyClean(JComponent component)  {    synchronized (this)      {        dirtyComponents.remove(component);      }    component.isCompletelyDirty = false;  }  /**   * Return <code>true</code> if the specified component is completely   * contained within its dirty region, otherwise <code>false</code>   *   * @param component The component to check for complete dirtyness   *   * @return Whether the component is completely dirty   *   * @see #dirtyComponents   * @see #addDirtyRegion   * @see #getDirtyRegion   * @see #isCompletelyDirty   * @see #markCompletelyClean   */  public boolean isCompletelyDirty(JComponent component)  {    if (! dirtyComponents.containsKey(component))      return false;    return component.isCompletelyDirty;  }  /**   * Validate all components which have been marked invalid in the {@link   * #invalidComponents} vector.   */  public void validateInvalidComponents()  {    // In order to keep the blocking of application threads minimal, we switch    // the invalidComponents field with the workInvalidComponents field and    // work with the workInvalidComponents field.    synchronized(this)    {      ArrayList swap = invalidComponents;      invalidComponents = workInvalidComponents;      workInvalidComponents = swap;    }    for (Iterator i = workInvalidComponents.iterator(); i.hasNext(); )      {        JComponent comp = (JComponent) i.next();        if (! (comp.isVisible() && comp.isShowing()))          continue;        comp.validate();      }    workInvalidComponents.clear();  }  /**   * Repaint all regions of all components which have been marked dirty in   * the {@link #dirtyComponents} table.   */  public synchronized void paintDirtyRegions()  {    // In order to keep the blocking of application threads minimal, we switch    // the dirtyComponents field with the workdirtyComponents field and the    // repaintOrder field with the workRepaintOrder field and work with the    // work* fields.    synchronized(this)    {      ArrayList swap = workRepaintOrder;      workRepaintOrder = repaintOrder;      repaintOrder = swap;      HashMap swap2 = workDirtyComponents;      workDirtyComponents = dirtyComponents;      dirtyComponents = swap2;    }    for (Iterator i = workRepaintOrder.iterator(); i.hasNext();)      {        JComponent comp = (JComponent) i.next();        // If a component is marked completely clean in the meantime, then skip        // it.        Rectangle damaged = (Rectangle) workDirtyComponents.get(comp);        if (damaged == null || damaged.isEmpty())          continue;        comp.paintImmediately(damaged);      }    workRepaintOrder.clear();    workDirtyComponents.clear();  }  /**   * Get an offscreen buffer for painting a component's image. This image   * may be smaller than the proposed dimensions, depending on the value of   * the {@link #doubleBufferMaximumSize} property.   *   * @param component The component to return an offscreen buffer for   * @param proposedWidth The proposed width of the offscreen buffer   * @param proposedHeight The proposed height of the offscreen buffer   *   * @return A shared offscreen buffer for painting   *   * @see #doubleBuffer   */  public Image getOffscreenBuffer(Component component, int proposedWidth,                                  int proposedHeight)  {    if (doubleBuffer == null         || (((doubleBuffer.getWidth(null) < proposedWidth)              || (doubleBuffer.getHeight(null) < proposedHeight))            && (proposedWidth < doubleBufferMaximumSize.width)            && (proposedHeight < doubleBufferMaximumSize.height)))      {        doubleBuffer = component.createImage(proposedWidth, proposedHeight);      }    return doubleBuffer;  }  /**   * Creates and returns a volatile offscreen buffer for the specified   * component that can be used as a double buffer. The returned image   * is a {@link VolatileImage}. Its size will be <code>(proposedWidth,   * proposedHeight)</code> except when the maximum double buffer size   * has been set in this RepaintManager.   *   * @param comp the Component for which to create a volatile buffer   * @param proposedWidth the proposed width of the buffer   * @param proposedHeight the proposed height of the buffer   *   * @since 1.4   *   * @see VolatileImage   */  public Image getVolatileOffscreenBuffer(Component comp, int proposedWidth,                                          int proposedHeight)  {    int maxWidth = doubleBufferMaximumSize.width;    int maxHeight = doubleBufferMaximumSize.height;    return comp.createVolatileImage(Math.min(maxWidth, proposedWidth),                                    Math.min(maxHeight, proposedHeight));  }    /**   * Get the value of the {@link #doubleBufferMaximumSize} property.   *   * @return The current value of the property   *   * @see #setDoubleBufferMaximumSize   */  public Dimension getDoubleBufferMaximumSize()  {    return doubleBufferMaximumSize;  }  /**   * Set the value of the {@link #doubleBufferMaximumSize} property.   *   * @param size The new value of the property   *   * @see #getDoubleBufferMaximumSize   */  public void setDoubleBufferMaximumSize(Dimension size)  {    doubleBufferMaximumSize = size;  }  /**   * Set the value of the {@link #doubleBufferingEnabled} property.   *   * @param buffer The new value of the property   *   * @see #isDoubleBufferingEnabled   */  public void setDoubleBufferingEnabled(boolean buffer)  {    doubleBufferingEnabled = buffer;  }  /**   * Get the value of the {@link #doubleBufferingEnabled} property.   *   * @return The current value of the property   *   * @see #setDoubleBufferingEnabled   */  public boolean isDoubleBufferingEnabled()  {    return doubleBufferingEnabled;  }    public String toString()  {    return "RepaintManager";  }}

⌨️ 快捷键说明

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