nifty_gui_popup_menu.html 9.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]--><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="Asciidoctor 1.5.4"><title>Nifty GUI: Create a PopUp Menu</title><link rel="stylesheet" href="./asciidoctor.css">
  2. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">
  3. <link rel="stylesheet" href="./coderay-asciidoctor.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min.css"><link rel="stylesheet" href="/home/travis/build/jMonkeyEngine/wiki/build/asciidoc/html5/jme3/advanced/twemoji-awesome.css"></head><body class="article toc2 toc-left"><div id="header"><div id="toolbar"><a href="https://github.com/jMonkeyEngine/wiki/edit/master/src/docs/asciidoc/jme3/advanced/nifty_gui_popup_menu.adoc"><i class="fa fa-pencil-square" aria-hidden="true"></i></a><a href="https://github.com/jMonkeyEngine/wiki/new/master/src/docs/asciidoc/jme3/advanced/"><i class="fa fa-plus-square" aria-hidden="true"></i></a><input dir="auto" style="position: relative; vertical-align: top;" spellcheck="false" autocomplete="off" class="searchbox__input aa-input" id="doc-search" name="search" placeholder="Search in the doc" required="required" type="search"></div><h1>Nifty GUI: Create a PopUp Menu</h1><div class="details"><span class="author" id="author"></span><br><span id="revnumber">version ,</span> <span id="revdate">2016/03/17 20:48</span></div><div id="toc" class="toc2"><div id="toctitle">Table of Contents</div></div></div><div id="content"><div class="paragraph"><p>Even though you create and populate the popup menu in Java, you still need a “placeholder in your XML file.
  4. The popup element needs to be placed <em>outside</em> of any screen!</p></div>
  5. <div class="listingblock"><div class="content"><pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;useControls</span> <span class="attribute-name">filename</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">nifty-default-controls.xml</span><span class="delimiter">&quot;</span></span><span class="tag">/&gt;</span>
  6. ...
  7. <span class="tag">&lt;popup</span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">niftyPopupMenu</span><span class="delimiter">&quot;</span></span> <span class="attribute-name">childLayout</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">absolute-inside</span><span class="delimiter">&quot;</span></span>
  8. <span class="attribute-name">controller</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">ControllerOfYourChoice</span><span class="delimiter">&quot;</span></span> <span class="attribute-name">width</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">10%</span><span class="delimiter">&quot;</span></span><span class="tag">&gt;</span>
  9. <span class="tag">&lt;interact</span> <span class="attribute-name">onClick</span>=<span class="string"><span class="delimiter">&quot;</span>closePopup()<span class="delimiter">&quot;</span></span> <span class="attribute-name">onSecondaryClick</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">closePopup()</span><span class="delimiter">&quot;</span></span> <span class="attribute-name">onTertiaryClick</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">closePopup()</span><span class="delimiter">&quot;</span></span> <span class="tag">/&gt;</span>
  10. <span class="tag">&lt;control</span> <span class="attribute-name">id</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">#menu</span><span class="delimiter">&quot;</span></span> <span class="attribute-name">name</span>=<span class="string"><span class="delimiter">&quot;</span><span class="content">niftyMenu</span><span class="delimiter">&quot;</span></span> <span class="tag">/&gt;</span>
  11. <span class="tag">&lt;/popup&gt;</span>
  12. ...</code></pre></div></div>
  13. <div class="paragraph"><p>A brief explanation of some the attributes above:</p></div>
  14. <div class="ulist"><ul><li><p>The popup id is used within your Java code so that nifty knows which popup placeholder to create.</p></li><li><p>The Controller tells Nifty which Java class handles MenuItemActivatedEvent.</p></li><li><p>The on(Secondary/Tertiary)Click tells Nifty to close the popup if the user clicks anywhere except on the menu items (in this example; you have to define the closePopup()-method yourself, in the screen controller)</p></li><li><p>The control id is used by the Java class to define a control type (i.e. Menu)</p></li></ul></div>
  15. <div class="paragraph"><p>The Java code within your defined ScreenController implementation:</p></div>
  16. <div class="listingblock"><div class="content"><pre class="CodeRay highlight"><code data-lang="java"><span class="directive">private</span> <span class="predefined-type">Element</span> popup;
  17. ...
  18. public <span class="type">void</span> createMyPopupMenu(){
  19. popup = nifty.createPopup(<span class="string"><span class="delimiter">&quot;</span><span class="content">niftyPopupMenu</span><span class="delimiter">&quot;</span></span>);
  20. <span class="predefined-type">Menu</span> myMenu = popup.findNiftyControl(<span class="string"><span class="delimiter">&quot;</span><span class="content">#menu</span><span class="delimiter">&quot;</span></span>, <span class="predefined-type">Menu</span>.class);
  21. myMenu.setWidth(<span class="keyword">new</span> SizeValue(<span class="string"><span class="delimiter">&quot;</span><span class="content">100px</span><span class="delimiter">&quot;</span></span>)); <span class="comment">// must be set</span>
  22. myMenu.addMenuItem(<span class="string"><span class="delimiter">&quot;</span><span class="content">Click me!</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">menuItemIcon.png</span><span class="delimiter">&quot;</span></span>,
  23. <span class="keyword">new</span> menuItem(<span class="string"><span class="delimiter">&quot;</span><span class="content">menuItemid</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">blah blah</span><span class="delimiter">&quot;</span></span>)); <span class="comment">// menuItem is a custom class</span>
  24. nifty.subscribe(
  25. nifty.getCurrentScreen(),
  26. myMenu.getId(),
  27. MenuItemActivatedEvent.class,
  28. <span class="keyword">new</span> MenuItemActivatedEventSubscriber());
  29. }
  30. <span class="directive">public</span> <span class="type">void</span> showMenu() { <span class="comment">// the method to trigger the menu</span>
  31. <span class="comment">// If this is a menu that is going to be used many times, then</span>
  32. <span class="comment">// call this in your constructor rather than here</span>
  33. createMyPopupMenu()
  34. <span class="comment">// call the popup to screen of your choice:</span>
  35. nifty.showPopup(nifty.getCurrentScreen(), popup.getId(), <span class="predefined-constant">null</span>);
  36. }
  37. <span class="directive">private</span> <span class="type">class</span> <span class="class">menuItem</span> {
  38. <span class="directive">public</span> <span class="predefined-type">String</span> id;
  39. <span class="directive">public</span> <span class="predefined-type">String</span> name;
  40. <span class="directive">public</span> menuItem(<span class="predefined-type">String</span> id, <span class="predefined-type">String</span> name){
  41. <span class="local-variable">this</span>.id= id;
  42. <span class="local-variable">this</span>.name = name;
  43. }
  44. }</code></pre></div></div>
  45. <div class="ulist"><ul><li><p>The createMyPopupMenu() method creates the menu with set width so that you can populate it.</p></li><li><p>The showMenu() method is called by something to trigger the menu (i.e. could be a Key or some other method).</p></li><li><p>Note: if you want to be able to access the popup via your id, use createPopupWithId(id, id) instead.</p></li></ul></div>
  46. <div class="paragraph"><p>To handle menu item events (i.e. calling a method when you click on a menu item), you register (subscribe) a EventTopicSubscriber&lt;MenuItemActivatedEvent&gt; class implementation to a nifty screen and element.</p></div>
  47. <div class="listingblock"><div class="content"><pre class="CodeRay highlight"><code data-lang="java"> <span class="directive">private</span> <span class="type">class</span> <span class="class">MenuItemActivatedEventSubscriber</span>
  48. <span class="directive">implements</span> EventTopicSubscriber&lt;MenuItemActivatedEvent&gt; {
  49. <span class="annotation">@Override</span>
  50. <span class="directive">public</span> <span class="type">void</span> onEvent(<span class="directive">final</span> <span class="predefined-type">String</span> id, <span class="directive">final</span> MenuItemActivatedEvent event) {
  51. menuItem item = (menuItem) event.getItem();
  52. <span class="keyword">if</span> (<span class="string"><span class="delimiter">&quot;</span><span class="content">menuItemid</span><span class="delimiter">&quot;</span></span>.equals(item.id)) {
  53. <span class="comment">//do something !!!</span>
  54. }
  55. }
  56. };</code></pre></div></div></div><div id="footer"><div id="footer-text">Version <br>Last updated 2019-12-20 23:30:51 +00:00</div></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min.js"></script><script>docsearch({
  57. apiKey: 'a736b6d93de805e26ec2f49b55013fbd',
  58. indexName: 'jmonkeyengine',
  59. inputSelector: '#doc-search',
  60. debug: false // Set debug to true if you want to inspect the dropdown
  61. });</script></body></html>