<html><head>

<style id="css_styles" type="text/css"><!--blockquote.cite { margin-left: 5px; margin-right: 0px; padding-left: 10px; padding-right:0px; border-left: 1px solid #cccccc }
blockquote.cite2 {margin-left: 5px; margin-right: 0px; padding-left: 10px; padding-right:0px; border-left: 1px solid #cccccc; margin-top: 3px; padding-top: 0px; }
a img { border: 0px; }
table { border-collapse: collapse; }
li[style='text-align: center;'], li[style='text-align: center; '], li[style='text-align: right;'], li[style='text-align: right; '] {  list-style-position: inside;}
body { font-family: Helvetica; font-size: 9pt; }
.quote { margin-left: 1em; margin-right: 1em; border-left: 5px #ebebeb solid; padding-left: 0.3em; }
--></style></head><body class="plain" style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div>Alexey,</div><div><br /></div><div>> Does the input map of JTextArea contain shortcuts for Cut, Copy and Paste?</div><div><br /></div><div>When I call (on my Mac, using openJDK 17)</div><div><pre><span style="font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">UIManager</span><font color="#080808" face="JetBrains Mono, monospace" size="2">.</font><span style="color: rgb(8, 8, 8); font-family: "JetBrains Mono", monospace; font-size: 9.8pt; font-style: italic;">getDefaults</span><font color="#080808" face="JetBrains Mono, monospace" size="2">().get(</font><span style="color: rgb(6, 125, 23); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;">"TextArea.focusInputMap</span><font color="#067d17"><span>”</span></font><font color="#080808" face="JetBrains Mono, monospace" size="2">)</font></pre></div>
<div>… I get an InputMap with: “copy-to-clipboard”, “cut-to-clipboard”, and “paste-from-clipboard”.</div><div><br /></div><div>The code I tested against is:</div><div><div style="color: rgb(8, 8, 8); font-family: "JetBrains Mono", monospace; font-size: 9.8pt;"><pre><span style="color:#000000;">InputMap inputMap </span>= (<span style="color:#000000;">InputMap</span>) <span style="color:#000000;">UIManager</span>.getDefaults().get(<span style="color:#067d17;">"TextArea.focusInputMap"</span>);<br /><span style="color:#000000;">Map</span><<span style="color:#000000;">Object</span>, <span style="color:#000000;">Collection</span><<span style="color:#000000;">KeyStroke</span>>> <span style="color:#000000;">map </span>= <span style="color:#0033b3;">new </span>TreeMap<>();<br /><span style="color:#0033b3;">for </span>(<span style="color:#000000;">KeyStroke keyStroke </span>: <span style="color:#000000;">inputMap</span>.keys()) {<br />    <span style="color:#000000;">Object key </span>= <span style="color:#000000;">inputMap</span>.get(<span style="color:#000000;">keyStroke</span>);<br />    <span style="color:#000000;">Collection value </span>= <span style="color:#000000;">map</span>.get(<span style="color:#000000;">key</span>);<br />    <span style="color:#0033b3;">if </span>(<span style="color:#000000;">value </span>== <span style="color:#0033b3;">null</span>) {<br />        <span style="color:#000000;">value </span>= <span style="color:#0033b3;">new </span>HashSet();<br />        <span style="color:#000000;">map</span>.put(<span style="color:#000000;">key</span>, <span style="color:#000000;">value</span>);<br />    }<br />    <span style="color:#000000;">value</span>.add(<span style="color:#000000;">keyStroke</span>);<br />}<br /><span style="color:#0033b3;">for </span>(<span style="color:#000000;">Map</span>.<span style="color:#000000;">Entry</span><<span style="color:#000000;">Object</span>, <span style="color:#000000;">Collection</span><<span style="color:#000000;">KeyStroke</span>>> <span style="color:#000000;">e </span>: <span style="color:#000000;">map</span>.entrySet()) {<br />    <span style="color:#000000;">System</span>.<span style="color:#871094;font-style:italic;">out</span>.println(<span style="color:#000000;">e</span>);<br />}</pre></div></div><div><br /></div><div>Previous tests showed the same naming convention on Windows for JTextFields; I don’t know how standardized that naming convention is across all platforms / L&F’s.</div><div><br /></div><div> - Jeremy</div><div><br /></div>
<div><br /></div>
<div>
<div>------ Original Message ------</div>
<div>From <a href="mailto:mark.yagnatinsky@barclays.com">mark.yagnatinsky@barclays.com</a></div>
<div>To <a href="mailto:alexey.ivanov@oracle.com">alexey.ivanov@oracle.com</a>; <a href="mailto:mickleness@gmail.com">mickleness@gmail.com</a>; <a href="mailto:client-libs-dev@openjdk.org">client-libs-dev@openjdk.org</a></div>
<div>Date 3/5/24, 11:48:48 AM</div>
<div>Subject RE: how to get find out the keyboard shortcut for the paste action?</div></div><div><br /></div>
<div id="xde80e52221b84de"><blockquote type="cite" class="cite2">

<div class="plain_line">Thanks, this was educational.  I never even thought about how localization might affect all this.</div>
<div class="plain_line"> </div>
<div class="plain_line">-----Original Message-----</div>
<div class="plain_line">From: Aleksei Ivanov <<a href="mailto:alexey.ivanov@oracle.com">alexey.ivanov@oracle.com</a>></div>
<div class="plain_line">Sent: Tuesday, March 5, 2024 10:41 AM</div>
<div class="plain_line">To: Yagnatinsky, Mark : Markets Pre Trade <<a href="mailto:mark.yagnatinsky@barclays.com">mark.yagnatinsky@barclays.com</a>>; <a href="mailto:mickleness@gmail.com">mickleness@gmail.com</a>; <a href="mailto:client-libs-dev@openjdk.org">client-libs-dev@openjdk.org</a></div>
<div class="plain_line">Subject: Re: how to get find out the keyboard shortcut for the paste action?</div>
<div class="plain_line"> </div>
<div class="plain_line"> </div>
<div class="plain_line">CAUTION: This email originated from outside our organisation - <a href="mailto:alexey.ivanov@oracle.com">alexey.ivanov@oracle.com</a> Do not click on links, open attachments, or respond unless you recognize the sender and can validate the content is safe.</div>
<div class="plain_line">Hello Mark,</div>
<div class="plain_line"> </div>
<div class="plain_line">As far as I know, the shortcuts are localisable. For example, you use</div>
<div class="plain_line">Ctrl+S to save a file in an English version, yet users of Spanish</div>
<div class="plain_line">version of Windows use Ctrl+G (for Guardar) instead.</div>
<div class="plain_line"> </div>
<div class="plain_line">At the same time, the most common actions — Cut, Copy and Paste as well as Undo and Redo — usually have the same shortcuts across all languages and OS, although macOS uses Cmd instead of Ctrl. However, the shortcut for Redo is not as standard, Ctrl+Shift+Z and Ctrl+Y are used, both could be mapped at the same time.</div>
<div class="plain_line"> </div>
<div class="plain_line">I wonder what is the shortcut for Undo in German versions since German keyboard layout has Z and Y keys swapped. Does anyone know?</div>
<div class="plain_line"> </div>
<div class="plain_line">So, the shortcuts used in an application are controlled by the application and the shortcuts can be localised.</div>
<div class="plain_line"> </div>
<div class="plain_line">For this reason, the shortcuts are usually “hardcoded”.</div>
<div class="plain_line"> </div>
<div class="plain_line"> </div>
<div class="plain_line">@Jeremy</div>
<div class="plain_line">Does the input map of JTextArea contain shortcuts for Cut, Copy and Paste?</div>
<div class="plain_line"> </div>
<div class="plain_line">On 2024-03-04 20:42, <a href="mailto:mark.yagnatinsky@barclays.com">mark.yagnatinsky@barclays.com</a> wrote:</div>
<blockquote type="cite" class="cite">
<div class="plain_line"> </div>
<div class="plain_line"> Thanks!  I don’t have a particularly deep motivation here, other than</div>
<div class="plain_line"> curiosity.</div>
<div class="plain_line"> </div>
<div class="plain_line"> If you’re wondering how my curiosity got piqued initially, it was</div>
<div class="plain_line"> something like this:</div>
<div class="plain_line"> </div>
<div class="plain_line"> A while ago, someone at work was adding copy/paste support to some</div>
<div class="plain_line"> component that didn’t have it.</div>
<div class="plain_line"> </div>
<div class="plain_line"> I noticed that they “hardcoded” the shortcut “ctrl C”.</div>
<div class="plain_line"> </div>
<div class="plain_line"> And I thought to myself:</div>
<div class="plain_line"> </div>
<div class="plain_line"> Swing already “knows” that this is the right keyboard shortcut, in the</div>
<div class="plain_line"> sense that all components that support copy/paste “out of the box” use it.</div>
<div class="plain_line"> </div>
<div class="plain_line"> It would be nice if there was some way to ASK it to tell me what it</div>
<div class="plain_line"> “knows”.</div>
<div class="plain_line"> </div>
<div class="plain_line"> *From:* Jeremy Wood <<a href="mailto:mickleness@gmail.com">mickleness@gmail.com</a>></div>
<div class="plain_line"> *Sent:* Sunday, March 3, 2024 11:30 PM</div>
<div class="plain_line"> *To:* Yagnatinsky, Mark : Markets Pre Trade</div>
<div class="plain_line"> <<a href="mailto:mark.yagnatinsky@barclays.com">mark.yagnatinsky@barclays.com</a>>; <a href="mailto:client-libs-dev@openjdk.org">client-libs-dev@openjdk.org</a></div>
<div class="plain_line"> *Subject:* Re[2]: how to get find out the keyboard shortcut for the</div>
<div class="plain_line"> paste action?</div>
<div class="plain_line"> </div>
<div class="plain_line"> CAUTION: This email originated from outside our organisation -</div>
<div class="plain_line"> <a href="mailto:mickleness@gmail.com">mickleness@gmail.com</a> Do not click on links, open attachments, or</div>
<div class="plain_line"> respond unless you recognize the sender and can validate the content</div>
<div class="plain_line"> is safe.</div>
<div class="plain_line"> </div>
<div class="plain_line"> > But now I have a new question…</div>
<div class="plain_line"> </div>
<div class="plain_line"> > Is there any way to get the “usual” letter for a “common” operation?</div>
<div class="plain_line"> </div>
<div class="plain_line"> Hmm. Good question. Not that I know of.</div>
<div class="plain_line"> </div>
<div class="plain_line"> > Again, one could create a scratch text area and grovel through its</div>
<div class="plain_line"> input map, but that seems hacky.</div>
<div class="plain_line"> </div>
<div class="plain_line"> I agree sifting through the L&F seems hacky.</div>
<div class="plain_line"> </div>
<div class="plain_line"> I don’t think I understand exactly what you’re trying to implement</div>
<div class="plain_line"> here. If you give me a more concrete example: maybe I (or someone on</div>
<div class="plain_line"> this list) can offer a more concrete suggestion?</div>
<div class="plain_line"> </div>
<div class="plain_line"> I’ll add some context in case this speaks to your question.</div>
<div class="plain_line"> </div>
<div class="plain_line"> By default Swing gets this information in places like</div>
<div class="plain_line"> BasicTextUI#getInputMap(), which calls:</div>
<div class="plain_line"> </div>
<div class="plain_line"> InputMap shared=     (InputMap)DefaultLookup./get/(editor, this,    </div>
<div class="plain_line"> getPropertyPrefix() + ".focusInputMap”);</div>
<div class="plain_line"> </div>
<div class="plain_line"> The following works on my Mac & Windows machine (I think using JDK</div>
<div class="plain_line"> 19), but I wouldn’t be surprised if it fails in other platforms /</div>
<div class="plain_line"> L&F’s. It feels brittle, but it might (?) have potential:</div>
<div class="plain_line"> </div>
<div class="plain_line"> private KeyStroke getCopyKeyStroke() {</div>
<div class="plain_line"> </div>
<div class="plain_line"> InputMap inputMap = (InputMap)</div>
<div class="plain_line"> UIManager.getDefaults().get("TextField.focusInputMap"); for (KeyStroke</div>
<div class="plain_line"> keyStroke : inputMap.keys()) { Object action =</div>
<div class="plain_line"> inputMap.get(keyStroke); if ("copy-to-clipboard".equals(action)) {</div>
<div class="plain_line"> return keyStroke;         }     } /// this will show all the default</div>
<div class="plain_line"> keystrokes // System.out.println(Arrays.asList(inputMap.allKeys()));</div>
<div class="plain_line"> /return null; }</div>
<div class="plain_line"> </div>
<div class="plain_line"> Regards,</div>
<div class="plain_line"> </div>
<div class="plain_line">  - Jeremy</div>
<div class="plain_line"> </div>
<div class="plain_line"> ------ Original Message ------</div>
<div class="plain_line"> </div>
<div class="plain_line"> From <a href="mailto:mark.yagnatinsky@barclays.com">mark.yagnatinsky@barclays.com</a></div>
<div class="plain_line"> </div>
<div class="plain_line"> To <a href="mailto:mickleness@gmail.com">mickleness@gmail.com</a>; <a href="mailto:client-libs-dev@openjdk.org">client-libs-dev@openjdk.org</a></div>
<div class="plain_line"> </div>
<div class="plain_line"> Date 3/3/24, 6:00:46 PM</div>
<div class="plain_line"> </div>
<div class="plain_line"> Subject RE: how to get find out the keyboard shortcut for the paste</div>
<div class="plain_line"> action?</div>
<div class="plain_line"> </div>
<div class="plain_line">     Thanks for the response!  I didn’t expect to get one at this point</div>
<div class="plain_line"> J</div>
<div class="plain_line"> </div>
<div class="plain_line">     It does indeed answer my question!</div>
<div class="plain_line"> </div>
<div class="plain_line">     (Though you didn’t quite get the name right: there’s no Ex at the</div>
<div class="plain_line"> end…</div>
<div class="plain_line"> </div>
<div class="plain_line">     I take it you’ve done some Windows programming at some point)</div>
<div class="plain_line"> </div>
<div class="plain_line">     But now I have a new question…</div>
<div class="plain_line"> </div>
<div class="plain_line">     Is there any way to get the “usual” letter for a “common” operation?</div>
<div class="plain_line"> </div>
<div class="plain_line">     For instance, lots of programs support copy and paste.</div>
<div class="plain_line"> </div>
<div class="plain_line">     Is there a way to ask Java “what is the standard letter for paste”</div>
<div class="plain_line">     and get back “V”?</div>
<div class="plain_line"> </div>
<div class="plain_line">     Again, one could create a scratch text area and grovel through its</div>
<div class="plain_line">     input map, but that seems hacky.</div>
<div class="plain_line"> </div>
</blockquote>
<div class="plain_line">--</div>
<div class="plain_line">Regards,</div>
<div class="plain_line">Alexey</div>
<div class="plain_line"> </div>
<div class="plain_line">This message is for information purposes only. It is not a recommendation, advice, offer or solicitation to buy or sell a product or service, nor an official confirmation of any transaction. It is directed at persons who are professionals and is intended for the recipient(s) only. It is not directed at retail customers. This message is subject to the terms at: <a href="https://www.ib.barclays/disclosures/web-and-email-disclaimer.html">https://www.ib.barclays/disclosures/web-and-email-disclaimer.html</a>.</div>
<div class="plain_line"> </div>
<div class="plain_line">For important disclosures, please see: <a href="https://www.ib.barclays/disclosures/sales-and-trading-disclaimer.html">https://www.ib.barclays/disclosures/sales-and-trading-disclaimer.html</a> regarding marketing commentary from Barclays Sales and/or Trading desks, who are active market participants; <a href="https://www.ib.barclays/disclosures/barclays-global-markets-disclosures.html">https://www.ib.barclays/disclosures/barclays-global-markets-disclosures.html</a> regarding our standard terms for Barclays Investment Bank where we trade with you in principal-to-principal wholesale markets transactions; and in respect to Barclays Research, including disclosures relating to specific issuers, see: <a href="http://publicresearch.barclays.com">http://publicresearch.barclays.com</a>.</div>
<div class="plain_line">__________________________________________________________________________________</div>
<div class="plain_line">If you are incorporated or operating in Australia, read these important disclosures: <a href="https://www.ib.barclays/disclosures/important-disclosures-asia-pacific.html">https://www.ib.barclays/disclosures/important-disclosures-asia-pacific.html</a>.</div>
<div class="plain_line">__________________________________________________________________________________</div>
<div class="plain_line">For more details about how we use personal information, see our privacy notice: <a href="https://www.ib.barclays/disclosures/personal-information-use.html">https://www.ib.barclays/disclosures/personal-information-use.html</a>.</div>
<div class="plain_line">__________________________________________________________________________________</div>
</blockquote></div>
</body></html>