<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>