<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hi,<br>
    <br>
    Whilst I could perhaps provide some very minor tweaks to the wording
    you<br>
    are adding, I would first like to understand the details of why the
    rendering<br>
    becomes broken here since there doesn't seem to be anything
    intrinsically<br>
    wrong - only the model is being updated.<br>
    I've found that commenting out one of the other listener methods<br>
    BasicTreeUI.Handler.treeNodesInserted - "cures" it.<br>
    So what we seem to be saying here, is that when you get notification<br>
    of a change in the model, you must not make further changes in the
    model<br>
    until any UI listener has processed the first change .. and throwing
    this<br>
    on the queue via invokeLater is the obvious way to do that.<br>
    <br>
    But I've run out of time to look at quite where the rendering breaks<br>
    and I'm not sure if this is as general a problem as the new comment<br>
    would imply.<br>
    <br>
    So can you say something about why we miss rendering some nodes<br>
    and quite why BasicTreeUI.Handler.treeNodesInserted is breaking it.<br>
    <br>
    -phil.<br>
    <br>
    <br>
    <br>
    <div class="moz-cite-prefix">On 11/12/2017 11:07 PM, Krishna
      Addepalli wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:cb76bcd6-4bde-4be9-a712-56d5ca01e4b5@default">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle19
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle20
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
      <div class="WordSection1">
        <p class="MsoNormal"><span style="color:#1F497D">Hi Sergey,<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span style="color:#1F497D">Gentle
            reminder. Could you review?<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span style="color:#1F497D">Thanks,<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="color:#1F497D">Krishna<o:p></o:p></span></p>
        <p class="MsoNormal"><a name="_MailEndCompose"
            moz-do-not-send="true"><span style="color:#1F497D"><o:p> </o:p></span></a></p>
        <span style="mso-bookmark:_MailEndCompose"></span>
        <div>
          <div style="border:none;border-top:solid #E1E1E1
            1.0pt;padding:3.0pt 0in 0in 0in">
            <p class="MsoNormal"><b>From:</b> Krishna Addepalli <br>
              <b>Sent:</b> Wednesday, November 8, 2017 8:22 PM<br>
              <b>To:</b> <a class="moz-txt-link-abbreviated" href="mailto:swing-dev@openjdk.java.net">swing-dev@openjdk.java.net</a><br>
              <b>Subject:</b> RE: [10][JDK-8187936] Automatically
              selecting a new JTree node in a model listener can cause
              unusual behavior.<o:p></o:p></p>
          </div>
        </div>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal"><span style="color:#1F497D">Hi Sergey,<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="color:#1F497D">Could you
            review this and let me know your feedback?<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span style="color:#1F497D">Thanks,<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="color:#1F497D">Krishna<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
        <div>
          <div style="border:none;border-top:solid #E1E1E1
            1.0pt;padding:3.0pt 0in 0in 0in">
            <p class="MsoNormal"><b>From:</b> Krishna Addepalli <br>
              <b>Sent:</b> Friday, October 27, 2017 4:43 PM<br>
              <b>To:</b> <a href="mailto:swing-dev@openjdk.java.net"
                moz-do-not-send="true">swing-dev@openjdk.java.net</a><br>
              <b>Subject:</b> [10][JDK-8187936] Automatically selecting
              a new JTree node in a model listener can cause unusual
              behavior.<o:p></o:p></p>
          </div>
        </div>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Hi All,<o:p></o:p></p>
        <p class="MsoNormal">Please review the help text that is updated
          for this bug:<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Bug: JDK-8187936: <a
            href="https://bugs.openjdk.java.net/browse/JDK-8187936"
            moz-do-not-send="true">https://bugs.openjdk.java.net/browse/JDK-8187936</a><o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Webrev: <a
            href="http://cr.openjdk.java.net/%7Ekaddepalli/8187936/webrev00/"
            moz-do-not-send="true">http://cr.openjdk.java.net/~kaddepalli/8187936/webrev00/</a><o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Summary:<o:p></o:p></p>
        <p class="MsoNormal">As the bug title mentions, this is an
          unrecommended way of using the model listeners. The code
          posted in the bug tries to update the JTree path in the model
          listener callback, and since the JTree is yet to change itself
          to the underlying model, it results in weird UI behavior.<o:p></o:p></p>
        <p class="MsoNormal">Attached code in the bug is corrected and
          re-uploaded. <o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">This typically happens since listeners are
          called in a particular order (either last to first or first to
          last in the order of registration), and if the model listener
          tries to change the GUI before the GUI has had a chance to
          react itself to the changes in the underlying model. For
          example, highlighting a selection path for a node added in the
          JTree, in the TreeModelListener callback could lead to an
          extra node being added or existing nodes not being shown,
          since JTree would not have yet updated its state based on the
          model changes.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">In such cases it is recommended to wrap the
          callback function contents into a lambda, and invoke it
          through “SwingUtilities.invokeLater”. This ensures that all
          the UI elements have had a chance to react to the model
          changes, and any UI actions will be guaranteed to operate on
          the updated widgets.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Similar update has been done in
          package-info.java for Swing, so that it acts as a reference.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Thanks,<o:p></o:p></p>
        <p class="MsoNormal">Krishna<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
      </div>
    </blockquote>
    <br>
  </body>
</html>