repaintmanager.java

来自「Mac OS X 10.4.9 for x86 Source Code gcc」· Java 代码 · 共 543 行 · 第 1/2 页

JAVA
543
字号
      {        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.removeElement(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)      return;    Rectangle r = new Rectangle(x, y, w, h);    if (dirtyComponents.containsKey(component))      r = r.union((Rectangle)dirtyComponents.get(component));    dirtyComponents.put(component, r);    if (! repaintWorker.isLive())      {        repaintWorker.setLive(true);        SwingUtilities.invokeLater(repaintWorker);      }  }    /**   * 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)  {    return (Rectangle) dirtyComponents.get(component);  }    /**   * 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);  }  /**   * 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)  {    dirtyComponents.remove(component);  }  /**   * 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)  {    Rectangle dirty = (Rectangle) dirtyComponents.get(component);    if (dirty == null)      return false;    Rectangle r = component.getBounds();    if (r == null)      return true;    return dirty.contains(r);  }  /**   * Validate all components which have been marked invalid in the {@link   * #invalidComponents} vector.   */  public void validateInvalidComponents()  {    for (Enumeration e = invalidComponents.elements(); e.hasMoreElements(); )      {        JComponent comp = (JComponent) e.nextElement();        if (! (comp.isVisible() && comp.isShowing()))          continue;        comp.validate();      }    invalidComponents.clear();  }  /**   * Repaint all regions of all components which have been marked dirty in   * the {@link #dirtyComponents} table.   */  public void paintDirtyRegions()  {    // step 1: pull out roots and calculate spanning damage    HashMap roots = new HashMap();    for (Enumeration e = dirtyComponents.keys(); e.hasMoreElements(); )      {        JComponent comp = (JComponent) e.nextElement();        if (! (comp.isVisible() && comp.isShowing()))          continue;        Rectangle damaged = getDirtyRegion(comp);        if (damaged.width == 0 || damaged.height == 0)          continue;        JRootPane root = comp.getRootPane();        // If the component has no root, no repainting will occur.        if (root == null)          continue;        Rectangle rootDamage = SwingUtilities.convertRectangle(comp, damaged, root);        if (! roots.containsKey(root))          {            roots.put(root, rootDamage);          }        else          {            roots.put(root, ((Rectangle)roots.get(root)).union(rootDamage));          }      }    dirtyComponents.clear();    // step 2: paint those roots    Iterator i = roots.entrySet().iterator();    while(i.hasNext())      {        Map.Entry ent = (Map.Entry) i.next();        JRootPane root = (JRootPane) ent.getKey();        Rectangle rect = (Rectangle) ent.getValue();        root.paintImmediately(rect);                	      }  }  /**   * 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;  }  /**   * 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 #getDoubleBufferingEnabled   */  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 + =
减小字号Ctrl + -
显示快捷键?