> When using a TreeCellRenterer which creates new components in 
> getTreeCellRendererComponent() in a JTree that is not visible, changes to the 
> nodes cause a memory leak.
> When a node is changed, the Method getNodeDimensions() is called to calculate 
> the new dimensions for the node. In this method, 
> getTreeCellRendererComponent() is called to obtain the renderer component 
> (what else...) and [this component is added to 
> rendererPane](https://github.com/openjdk/jdk/blob/36f4b34f1953af736706ec67192204727808bc6c/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTreeUI.java#L3283-L3284).
>  It is not removed from the rendererPane afterwards. 
> Only when the tree is painted, the paint() method does a removeAll on the 
> rendererPane [in this 
> code](https://github.com/openjdk/jdk/blob/36f4b34f1953af736706ec67192204727808bc6c/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTreeUI.java#L1500)
> 
> FIx is added to remove the components from rendererPane when the JTree UI is 
> changed/uninstalled only when tree is not visible since they are already 
> removed when tree is painted in paint() method..

Prasanta Sadhukhan has updated the pull request incrementally with one 
additional commit since the last revision:

  Retain last component in rendererPane. Testcase added

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/17458/files
  - new: https://git.openjdk.org/jdk/pull/17458/files/301ecbce..de37cc96

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=17458&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=17458&range=01-02

  Stats: 17 lines in 1 file changed: 0 ins; 1 del; 16 mod
  Patch: https://git.openjdk.org/jdk/pull/17458.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/17458/head:pull/17458

PR: https://git.openjdk.org/jdk/pull/17458

Reply via email to