nifty_gui_java_layout.html 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <title>Laying Out the GUI in Java :: jMonkeyEngine Docs</title>
  7. <link rel="canonical" href="https://wiki.jmonkeyengine.org/docs/jme3/advanced/nifty_gui_java_layout.html">
  8. <meta name="keywords" content="gui, documentation, nifty, hud">
  9. <meta name="generator" content="Antora 2.3.3">
  10. <link rel="stylesheet" href="../../../_/css/site.css">
  11. <meta property="og:image" content="https://wiki.jmonkeyengine.org/_/img/iconx128.png">
  12. <meta property="og:description" content="Laying Out the GUI in Java">
  13. <meta property="og:title" content="jMonkeyEngine Docs">
  14. <link rel="stylesheet" href="../../../_/css/site-extra.css">
  15. <link rel="stylesheet" href="../../../_/css/vendor/docsearch.min.css">
  16. <!-- fetched from https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css -->
  17. <link rel="icon" href="../../../_/img/favicon.ico" type="image/x-icon">
  18. </head>
  19. <body class="article">
  20. <header class="header">
  21. <nav class="navbar">
  22. <div class="navbar-brand">
  23. <a class="navbar-item" href="https://wiki.jmonkeyengine.org">
  24. <img alt="" src="../../../_/img/jMonkeyDocLogo.png" height="32" type="image/x-icon">
  25. </a>
  26. <div class="navbar-item hide-for-print">
  27. <input id="search-input" type="text" placeholder="Search docs">
  28. </div>
  29. <button class="navbar-burger" data-target="topbar-nav">
  30. <span></span>
  31. <span></span>
  32. <span></span>
  33. </button>
  34. </div>
  35. <div id="topbar-nav" class="navbar-menu">
  36. <div class="navbar-end">
  37. <div class="navbar-item theme-switch-wrapper">
  38. <label class="theme-switch" for="checkbox">
  39. <input type="checkbox" id="checkbox" />
  40. <div class="slider round"></div>
  41. </label>
  42. </div>
  43. <a class="navbar-item" href="https://github.com/jmonkeyengine/wiki">Github</a>
  44. </div>
  45. </div>
  46. </nav>
  47. </header>
  48. <div class="body">
  49. <div class="nav-container" data-component="docs" data-version="master">
  50. <aside class="nav">
  51. <div class="panels">
  52. <div class="nav-panel-menu is-active" data-panel="menu">
  53. <nav class="nav-menu">
  54. <h3 class="title"><a href="../../documentation.html">Docs</a></h3>
  55. <ul class="nav-list">
  56. <li class="nav-item" data-depth="0">
  57. <ul class="nav-list">
  58. <li class="nav-item" data-depth="1">
  59. <a class="nav-link" href="../../documentation.html">Getting Started</a>
  60. </li>
  61. <li class="nav-item" data-depth="1">
  62. <a class="nav-link" href="https://javadoc.jmonkeyengine.org/v3.3.2-stable">JavaDoc</a>
  63. </li>
  64. <li class="nav-item" data-depth="1">
  65. <button class="nav-item-toggle"></button>
  66. <a class="nav-link" href="../../jme3.html">jMonkeyEngine 3</a>
  67. <ul class="nav-list">
  68. <li class="nav-item" data-depth="2">
  69. <button class="nav-item-toggle"></button>
  70. <span class="nav-text">Beginner Tutorials</span>
  71. <ul class="nav-list">
  72. <li class="nav-item" data-depth="3">
  73. <a class="nav-link" href="../beginner/hello_simpleapplication.html">Hello SimpleApplication</a>
  74. </li>
  75. <li class="nav-item" data-depth="3">
  76. <a class="nav-link" href="../beginner/hello_node.html">Hello Node</a>
  77. </li>
  78. <li class="nav-item" data-depth="3">
  79. <a class="nav-link" href="../beginner/hello_asset.html">Hello Asset</a>
  80. </li>
  81. <li class="nav-item" data-depth="3">
  82. <a class="nav-link" href="../beginner/hello_main_event_loop.html">Hello Main Event Loop</a>
  83. </li>
  84. <li class="nav-item" data-depth="3">
  85. <a class="nav-link" href="../beginner/hello_input_system.html">Hello Input System</a>
  86. </li>
  87. <li class="nav-item" data-depth="3">
  88. <a class="nav-link" href="../beginner/hello_material.html">Hello Material</a>
  89. </li>
  90. <li class="nav-item" data-depth="3">
  91. <a class="nav-link" href="../beginner/hello_animation.html">Hello Animation</a>
  92. </li>
  93. <li class="nav-item" data-depth="3">
  94. <a class="nav-link" href="../beginner/hello_picking.html">Hello Picking</a>
  95. </li>
  96. <li class="nav-item" data-depth="3">
  97. <a class="nav-link" href="../beginner/hello_collision.html">Hello Collision</a>
  98. </li>
  99. <li class="nav-item" data-depth="3">
  100. <a class="nav-link" href="../beginner/hello_terrain.html">Hello Terrain</a>
  101. </li>
  102. <li class="nav-item" data-depth="3">
  103. <a class="nav-link" href="../beginner/hello_audio.html">Hello Audio</a>
  104. </li>
  105. <li class="nav-item" data-depth="3">
  106. <a class="nav-link" href="../beginner/hello_effects.html">Hello Effects</a>
  107. </li>
  108. <li class="nav-item" data-depth="3">
  109. <a class="nav-link" href="../beginner/hello_physics.html">Hello Physics</a>
  110. </li>
  111. </ul>
  112. </li>
  113. <li class="nav-item" data-depth="2">
  114. <button class="nav-item-toggle"></button>
  115. <span class="nav-text">Intermediate Tutorials</span>
  116. <ul class="nav-list">
  117. <li class="nav-item" data-depth="3">
  118. <button class="nav-item-toggle"></button>
  119. <span class="nav-text">Concepts</span>
  120. <ul class="nav-list">
  121. <li class="nav-item" data-depth="4">
  122. <a class="nav-link" href="../intermediate/best_practices.html">Best Practices</a>
  123. </li>
  124. <li class="nav-item" data-depth="4">
  125. <a class="nav-link" href="../intermediate/simpleapplication.html">Simple Application</a>
  126. </li>
  127. <li class="nav-item" data-depth="4">
  128. <a class="nav-link" href="../features.html">Features</a>
  129. </li>
  130. <li class="nav-item" data-depth="4">
  131. <a class="nav-link" href="../intermediate/optimization.html">Optimization</a>
  132. </li>
  133. <li class="nav-item" data-depth="4">
  134. <a class="nav-link" href="../faq.html">FAQ</a>
  135. </li>
  136. </ul>
  137. </li>
  138. <li class="nav-item" data-depth="3">
  139. <button class="nav-item-toggle"></button>
  140. <span class="nav-text">Math Concepts</span>
  141. <ul class="nav-list">
  142. <li class="nav-item" data-depth="4">
  143. <a class="nav-link" href="../math_for_dummies.html">Math For Dummies</a>
  144. </li>
  145. <li class="nav-item" data-depth="4">
  146. <a class="nav-link" href="../intermediate/math.html">Math</a>
  147. </li>
  148. <li class="nav-item" data-depth="4">
  149. <a class="nav-link" href="../math.html">More Math</a>
  150. </li>
  151. <li class="nav-item" data-depth="4">
  152. <a class="nav-link" href="../rotate.html">Rotate</a>
  153. </li>
  154. <li class="nav-item" data-depth="4">
  155. <a class="nav-link" href="../math_video_tutorials.html">Math Video Tutorials</a>
  156. </li>
  157. </ul>
  158. </li>
  159. <li class="nav-item" data-depth="3">
  160. <button class="nav-item-toggle"></button>
  161. <span class="nav-text">3D Graphics Concepts</span>
  162. <ul class="nav-list">
  163. <li class="nav-item" data-depth="4">
  164. <a class="nav-link" href="../intermediate/multi-media_asset_pipeline.html">Multi-Media Asset Pipeline</a>
  165. </li>
  166. <li class="nav-item" data-depth="4">
  167. <a class="nav-link" href="../scenegraph_for_dummies.html">Scenegraph for Dummies</a>
  168. </li>
  169. <li class="nav-item" data-depth="4">
  170. <a class="nav-link" href="../beginner/hellovector.html">Hello Vector</a>
  171. </li>
  172. <li class="nav-item" data-depth="4">
  173. <a class="nav-link" href="../terminology.html">Terminology</a>
  174. </li>
  175. <li class="nav-item" data-depth="4">
  176. <a class="nav-link" href="../intermediate/how_to_use_materials.html">How to Use Materials</a>
  177. </li>
  178. <li class="nav-item" data-depth="4">
  179. <a class="nav-link" href="../intermediate/transparency_sorting.html">Transparency and Sorting</a>
  180. </li>
  181. <li class="nav-item" data-depth="4">
  182. <a class="nav-link" href="../external/blender.html">Importing from Blender</a>
  183. </li>
  184. <li class="nav-item" data-depth="4">
  185. <a class="nav-link" href="../external/3dsmax.html">Importing from 3DS Max</a>
  186. </li>
  187. </ul>
  188. </li>
  189. </ul>
  190. </li>
  191. </ul>
  192. </li>
  193. <li class="nav-item" data-depth="1">
  194. <a class="nav-link" href="../../logo.html">Logo Usage</a>
  195. </li>
  196. <li class="nav-item" data-depth="1">
  197. <a class="nav-link" href="../../bsd_license.html">License</a>
  198. </li>
  199. <li class="nav-item" data-depth="1">
  200. <a class="nav-link" href="../../github_tips.html">Github Tips</a>
  201. </li>
  202. </ul>
  203. </li>
  204. <li class="nav-item" data-depth="0">
  205. <button class="nav-item-toggle"></button>
  206. <span class="nav-text">SDK</span>
  207. <ul class="nav-list">
  208. <li class="nav-item" data-depth="1">
  209. <a class="nav-link" href="../../sdk.html">jMonkeyEngine SDK</a>
  210. </li>
  211. </ul>
  212. </li>
  213. </ul>
  214. </nav>
  215. </div>
  216. <div class="nav-panel-explore" data-panel="explore">
  217. <div class="context">
  218. <span class="title">Docs</span>
  219. <span class="version">master</span>
  220. </div>
  221. <ul class="components">
  222. <li class="component is-current">
  223. <span class="title">Docs</span>
  224. <ul class="versions">
  225. <li class="version is-current is-latest">
  226. <a href="../../documentation.html">master</a>
  227. </li>
  228. </ul>
  229. </li>
  230. <li class="component">
  231. <span class="title">Wiki UI</span>
  232. <ul class="versions">
  233. <li class="version is-latest">
  234. <a href="../../../wiki-ui/index.html">master</a>
  235. </li>
  236. </ul>
  237. </li>
  238. </ul>
  239. </div>
  240. </div>
  241. </aside>
  242. </div>
  243. <main class="article">
  244. <div class="toolbar" role="navigation">
  245. <button class="nav-toggle"></button>
  246. <nav class="breadcrumbs" aria-label="breadcrumbs">
  247. <ul>
  248. <li><a href="../../documentation.html">Docs</a></li>
  249. <li><a href="nifty_gui_java_layout.html">Laying Out the GUI in Java</a></li>
  250. </ul>
  251. </nav>
  252. <div class="edit-this-page"><a href="https://github.com/jMonkeyEngine/wiki/edit/master/docs/modules/ROOT/pages/jme3/advanced/nifty_gui_java_layout.adoc">Edit this Page</a></div>
  253. </div>
  254. <div class="content">
  255. <article class="doc">
  256. <h1 class="page">Laying Out the GUI in Java</h1>
  257. <div id="preamble">
  258. <div class="sectionbody">
  259. <div class="olist arabic">
  260. <ol class="arabic">
  261. <li>
  262. <p><a href="nifty_gui.html" class="page">Nifty GUI Concepts</a></p>
  263. </li>
  264. <li>
  265. <p><a href="nifty_gui_best_practices.html" class="page">Nifty GUI Best Practices</a></p>
  266. </li>
  267. <li>
  268. <p><a href="nifty_gui_xml_layout.html" class="page">Nifty GUI XML Layout</a> or <strong>Nifty <abbr title="Graphical User Interface">GUI</abbr> Java Layout</strong></p>
  269. </li>
  270. <li>
  271. <p><a href="nifty_gui_overlay.html" class="page">Nifty GUI Overlay</a> or <a href="nifty_gui_projection.html" class="page">Nifty GUI Projection</a></p>
  272. </li>
  273. <li>
  274. <p><a href="nifty_gui_java_interaction.html" class="page">Interact with the GUI from Java</a></p>
  275. </li>
  276. </ol>
  277. </div>
  278. <div class="paragraph">
  279. <p>You can &#8220;draw&#8221; the <abbr title="Graphical User Interface">GUI</abbr> to the screen by writing Java code – alternatively to using XML. Typically you lay out the static base <abbr title="Graphical User Interface">GUI</abbr> in XML, and use Java commands if you need to change the <abbr title="Graphical User Interface">GUI</abbr> dynamically at runtime. In theory, you can also lay out the whole <abbr title="Graphical User Interface">GUI</abbr> in Java (but we don&#8217;t cover that here).</p>
  280. </div>
  281. </div>
  282. </div>
  283. <div class="sect1">
  284. <h2 id="sample-code"><a class="anchor" href="#sample-code"></a>Sample Code</h2>
  285. <div class="sectionbody">
  286. <div class="paragraph">
  287. <p>Sample project</p>
  288. </div>
  289. <div class="ulist">
  290. <ul>
  291. <li>
  292. <p><strong>Original Source Code:</strong> <a href="https://github.com/nifty-gui/nifty-gui/tree/1.4/nifty-examples/src/main/java/de/lessvoid/nifty/examples/defaultcontrols">/nifty-examples/src/main/java/de/lessvoid/nifty/examples/defaultcontrols/</a>.</p>
  293. </li>
  294. </ul>
  295. </div>
  296. <div class="paragraph">
  297. <p>Just so you get a quick picture what Nifty <abbr title="Graphical User Interface">GUI</abbr>'s Java Syntax looks like, here is the most basic example. It creates a screen with a layer and a panel that contains a button.</p>
  298. </div>
  299. <div class="listingblock">
  300. <div class="content">
  301. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">package mygame;
  302. import com.jme3.app.Application;
  303. import com.jme3.app.SimpleApplication;
  304. import com.jme3.app.state.BaseAppState;
  305. import com.jme3.niftygui.NiftyJmeDisplay;
  306. import de.lessvoid.nifty.Nifty;
  307. import de.lessvoid.nifty.builder.LayerBuilder;
  308. import de.lessvoid.nifty.builder.PanelBuilder;
  309. import de.lessvoid.nifty.builder.ScreenBuilder;
  310. import de.lessvoid.nifty.controls.button.builder.ButtonBuilder;
  311. import de.lessvoid.nifty.screen.DefaultScreenController;
  312. public class MyStartScreen extends BaseAppState {
  313. @Override
  314. protected void initialize(Application app) {
  315. //It is technically safe to do all initialization and cleanup in the
  316. //onEnable()/onDisable() methods. Choosing to use initialize() and
  317. //cleanup() for this is a matter of performance specifics for the
  318. //implementor.
  319. //TODO: initialize your AppState, e.g. attach spatials to rootNode
  320. }
  321. @Override
  322. protected void cleanup(Application app) {
  323. //TODO: clean up what you initialized in the initialize method,
  324. //e.g. remove all spatials from rootNode
  325. }
  326. //onEnable()/onDisable() can be used for managing things that should
  327. //only exist while the state is enabled. Prime examples would be scene
  328. //graph attachment or input listener attachment.
  329. @Override
  330. protected void onEnable() {
  331. NiftyJmeDisplay niftyDisplay = NiftyJmeDisplay.newNiftyJmeDisplay(
  332. getApplication().getAssetManager(),
  333. getApplication().getInputManager(),
  334. getApplication().getAudioRenderer(),
  335. getApplication().getGuiViewPort());
  336. Nifty nifty = niftyDisplay.getNifty();
  337. getApplication().getGuiViewPort().addProcessor(niftyDisplay);
  338. ((SimpleApplication) getApplication()).getFlyByCamera().setDragToRotate(true);
  339. nifty.loadStyleFile("nifty-default-styles.xml");
  340. nifty.loadControlFile("nifty-default-controls.xml");
  341. // &lt;screen&gt;
  342. nifty.addScreen("Screen_ID", new ScreenBuilder("Hello Nifty Screen"){{
  343. controller(new DefaultScreenController()); // Screen properties
  344. // &lt;layer&gt;
  345. layer(new LayerBuilder("Layer_ID") {{
  346. childLayoutVertical(); // layer properties, add more...
  347. // &lt;panel&gt;
  348. panel(new PanelBuilder("Panel_ID") {{
  349. childLayoutCenter(); // panel properties, add more...
  350. // GUI elements
  351. control(new ButtonBuilder("Button_ID", "Hello Nifty"){{
  352. alignCenter();
  353. valignCenter();
  354. height("5%");
  355. width("15%");
  356. }});
  357. //.. add more GUI elements here
  358. }});
  359. // &lt;/panel&gt;
  360. }});
  361. // &lt;/layer&gt;
  362. }}.build(nifty));
  363. // &lt;/screen&gt;
  364. nifty.gotoScreen("Screen_ID"); // start the screen
  365. }
  366. @Override
  367. protected void onDisable() {
  368. //Called when the state was previously enabled but is now disabled
  369. //either because setEnabled(false) was called or the state is being
  370. //cleaned up.
  371. }
  372. @Override
  373. public void update(float tpf) {
  374. //TODO: implement behavior during runtime
  375. }
  376. }</code></pre>
  377. </div>
  378. </div>
  379. </div>
  380. </div>
  381. <div class="sect1">
  382. <h2 id="implement-your-gui-layout"><a class="anchor" href="#implement-your-gui-layout"></a>Implement Your GUI Layout</h2>
  383. <div class="sectionbody">
  384. <div class="imageblock text-left">
  385. <div class="content">
  386. <img src="../../_images/jme3/advanced/gui-layout-draft.png" alt="gui-layout-draft.png" width="" height="">
  387. </div>
  388. </div>
  389. <div class="paragraph">
  390. <p>In this tutorial, you recreate the same screen as in the <a href="nifty_gui_xml_layout.html" class="page">Laying out the GUI in XML</a> example.</p>
  391. </div>
  392. <div class="paragraph">
  393. <p>Create an Screen.Java file that extends BaseAppState in the mygame directory of your project. One Java file can contain several, or even all screens. As a reminder: Nifty displays one screen at a time; a screen contains several layers on top of one another; each layer contains panels that are embedded into another; the panels contain the actual content (text, images, or controls).</p>
  394. </div>
  395. <div class="paragraph">
  396. <p>Next, setup your Nifty display.</p>
  397. </div>
  398. <div class="listingblock">
  399. <div class="content">
  400. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">NiftyJmeDisplay niftyDisplay = NiftyJmeDisplay.newNiftyJmeDisplay(
  401. getApplication().getAssetManager(),
  402. getApplication().getInputManager(),
  403. getApplication().getAudioRenderer(),
  404. getApplication().getGuiViewPort());
  405. Nifty nifty = niftyDisplay.getNifty();
  406. getApplication().getGuiViewPort().addProcessor(niftyDisplay);
  407. ((SimpleApplication) getApplication()).getFlyByCamera().setDragToRotate(true);
  408. nifty.loadStyleFile("nifty-default-styles.xml");
  409. nifty.loadControlFile("nifty-default-controls.xml");
  410. // &lt;!-- ... --&gt;
  411. nifty.gotoScreen("start"); // start the screen</code></pre>
  412. </div>
  413. </div>
  414. <div class="sect2">
  415. <h3 id="make-screens"><a class="anchor" href="#make-screens"></a>Make Screens</h3>
  416. <div class="paragraph">
  417. <p>The following minimal Java file contains a start screen and a HUD screen. (Neither has been defined yet.)</p>
  418. </div>
  419. <div class="listingblock">
  420. <div class="content">
  421. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">nifty.addScreen("start", new ScreenBuilder("start") {{
  422. controller(new DefaultScreenController());
  423. // &lt;!-- ... --&gt;
  424. }}.build(nifty));
  425. nifty.addScreen("hud", new ScreenBuilder("hud") {{
  426. controller(new DefaultScreenController());
  427. // &lt;!-- ... --&gt;
  428. }}.build(nifty));</code></pre>
  429. </div>
  430. </div>
  431. <div class="paragraph">
  432. <p>Every Nifty <abbr title="Graphical User Interface">GUI</abbr> must have a start screen. The others (in this example, the HUD screen) are optional.</p>
  433. </div>
  434. </div>
  435. <div class="sect2">
  436. <h3 id="make-layers"><a class="anchor" href="#make-layers"></a>Make Layers</h3>
  437. <div class="paragraph">
  438. <p>The following Java code shows how we add layers to the start screen and HUD screen. Add the following to your <code>Screen.java</code> file:</p>
  439. </div>
  440. <div class="listingblock">
  441. <div class="content">
  442. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">nifty.addScreen("start", new ScreenBuilder("start") {{
  443. controller(new DefaultScreenController());
  444. // layer added
  445. layer(new LayerBuilder("background") {{
  446. childLayoutCenter();
  447. backgroundColor("#000f");
  448. // &lt;!-- ... --&gt;
  449. }});
  450. layer(new LayerBuilder("foreground") {{
  451. childLayoutVertical();
  452. backgroundColor("#0000");
  453. // &lt;!-- ... --&gt;
  454. }});
  455. // layer added
  456. }}.build(nifty));</code></pre>
  457. </div>
  458. </div>
  459. <div class="paragraph">
  460. <p>Repeat the same, but use</p>
  461. </div>
  462. <div class="listingblock">
  463. <div class="content">
  464. <pre class="highlightjs highlight"><code>nifty.addScreen("hud", new ScreenBuilder("hud"){{</code></pre>
  465. </div>
  466. </div>
  467. <div class="paragraph">
  468. <p>for the HUD screen.</p>
  469. </div>
  470. <div class="paragraph">
  471. <p>In a layer, you can now add panels and arrange them. Panels are containers that mark the areas where you want to display text, images, or controls (buttons etc) later.</p>
  472. </div>
  473. </div>
  474. <div class="sect2">
  475. <h3 id="make-panels"><a class="anchor" href="#make-panels"></a>Make Panels</h3>
  476. <div class="paragraph">
  477. <p>A panel is the inner-most container (that will contain the actual content: text, images, or controls). You place panels inside layers. The following panels go into in the <code>start</code> screen <code>foreground</code> layer:</p>
  478. </div>
  479. <div class="listingblock">
  480. <div class="content">
  481. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">nifty.addScreen("start", new ScreenBuilder("start") {{
  482. controller(new DefaultScreenController());
  483. // layer added
  484. layer(new LayerBuilder("background") {{
  485. childLayoutCenter();
  486. backgroundColor("#000f");
  487. // &lt;!-- ... --&gt;
  488. }});
  489. layer(new LayerBuilder("foreground") {{
  490. childLayoutVertical();
  491. backgroundColor("#0000");
  492. // panel added
  493. panel(new PanelBuilder("panel_top") {{
  494. childLayoutCenter();
  495. alignCenter();
  496. backgroundColor("#f008");
  497. height("25%");
  498. width("75%");
  499. }});
  500. panel(new PanelBuilder("panel_mid") {{
  501. childLayoutCenter();
  502. alignCenter();
  503. backgroundColor("#0f08");
  504. height("50%");
  505. width("75%");
  506. }});
  507. panel(new PanelBuilder("panel_bottom") {{
  508. childLayoutHorizontal();
  509. alignCenter();
  510. backgroundColor("#00f8");
  511. height("25%");
  512. width("75%");
  513. panel(new PanelBuilder("panel_bottom_left") {{
  514. childLayoutCenter();
  515. valignCenter();
  516. backgroundColor("#44f8");
  517. height("50%");
  518. width("50%");
  519. }});
  520. panel(new PanelBuilder("panel_bottom_right") {{
  521. childLayoutCenter();
  522. valignCenter();
  523. backgroundColor("#88f8");
  524. height("50%");
  525. width("50%");
  526. }});
  527. }}); // panel added
  528. }});
  529. // layer added
  530. }}.build(nifty));</code></pre>
  531. </div>
  532. </div>
  533. <div class="paragraph">
  534. <p>The following panels go into in the <code>hud</code> screen:</p>
  535. </div>
  536. <div class="listingblock">
  537. <div class="content">
  538. <pre class="highlightjs highlight"><code class="language-Java hljs" data-lang="Java">nifty.addScreen("hud", new ScreenBuilder("hud") {{
  539. controller(new DefaultScreenController());
  540. layer(new LayerBuilder("background") {{
  541. childLayoutCenter();
  542. backgroundColor("#000f");
  543. // &lt;!-- ... --&gt;
  544. }});
  545. layer(new LayerBuilder("foreground") {{
  546. childLayoutHorizontal();
  547. backgroundColor("#0000");
  548. // panel added
  549. panel(new PanelBuilder("panel_left") {{
  550. childLayoutVertical();
  551. backgroundColor("#0f08");
  552. height("100%");
  553. width("80%");
  554. // &lt;!-- spacer --&gt;
  555. }});
  556. panel(new PanelBuilder("panel_right") {{
  557. childLayoutVertical();
  558. backgroundColor("#00f8");
  559. height("100%");
  560. width("20%");
  561. panel(new PanelBuilder("panel_top_right1") {{
  562. childLayoutCenter();
  563. backgroundColor("#00f8");
  564. height("15%");
  565. width("100%");
  566. }});
  567. panel(new PanelBuilder("panel_top_right2") {{
  568. childLayoutCenter();
  569. backgroundColor("#44f8");
  570. height("15%");
  571. width("100%");
  572. }});
  573. panel(new PanelBuilder("panel_bot_right") {{
  574. childLayoutCenter();
  575. valignCenter();
  576. backgroundColor("#88f8");
  577. height("70%");
  578. width("100%");
  579. }});
  580. }}); // panel added
  581. }});
  582. }}.build(nifty));</code></pre>
  583. </div>
  584. </div>
  585. <div class="paragraph">
  586. <p>Try the sample. Remember to activate a screen using <code>nifty.gotoScreen("start");</code> or <code>hud</code> respectively.
  587. The result should look as follows:</p>
  588. </div>
  589. <div class="imageblock text-center">
  590. <div class="content">
  591. <img src="../../_images/jme3/advanced/nifty-gui-panels.png" alt="nifty-gui-panels.png" width="" height="">
  592. </div>
  593. </div>
  594. </div>
  595. </div>
  596. </div>
  597. <div class="sect1">
  598. <h2 id="adding-content-to-panels"><a class="anchor" href="#adding-content-to-panels"></a>Adding Content to Panels</h2>
  599. <div class="sectionbody">
  600. <div class="paragraph">
  601. <p>See also <a href="https://github.com/nifty-gui/nifty-gui/raw/1.4/nifty-core/manual/nifty-gui-the-manual-1.3.2.pdf">Nifty GUI - the Manual: Layouts</a> on the Nifty <abbr title="Graphical User Interface">GUI</abbr> site.</p>
  602. </div>
  603. <div class="sect2">
  604. <h3 id="add-images"><a class="anchor" href="#add-images"></a>Add Images</h3>
  605. <div class="paragraph">
  606. <p>The <code>start-background.png</code> image is a fullscreen background picture. In the <code>start</code> screen, add the following image element:</p>
  607. </div>
  608. <div class="listingblock">
  609. <div class="content">
  610. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">nifty.addScreen("start", new ScreenBuilder("start") {{
  611. controller(new DefaultScreenController());
  612. // layer added
  613. layer(new LayerBuilder("background") {{
  614. childLayoutCenter();
  615. backgroundColor("#000f");
  616. // add image
  617. image(new ImageBuilder() {{
  618. filename("Interface/start-background.png");
  619. }});
  620. }});
  621. // &lt;!-- ... --&gt;
  622. }}.build(nifty));</code></pre>
  623. </div>
  624. </div>
  625. <div class="paragraph">
  626. <p>The <code>hud-frame.png</code> image is a transparent frame that we use as HUD decoration. In the <code>hud</code> screen, add the following image element:</p>
  627. </div>
  628. <div class="listingblock">
  629. <div class="content">
  630. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">nifty.addScreen("hud", new ScreenBuilder("hud") {{
  631. controller(new DefaultScreenController());
  632. layer(new LayerBuilder("background") {{
  633. childLayoutCenter();
  634. backgroundColor("#000f");
  635. // add image
  636. image(new ImageBuilder() {{
  637. filename("Interface/hud-frame.png");
  638. }});
  639. }});
  640. // &lt;!-- ... --&gt;
  641. }}.build(nifty));</code></pre>
  642. </div>
  643. </div>
  644. <div class="paragraph">
  645. <p>The <code>face1.png</code> image is an image that you want to use as a status icon.
  646. In the <code>hud</code> screens <code>foreground</code> layer, add the following image element:</p>
  647. </div>
  648. <div class="listingblock">
  649. <div class="content">
  650. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">panel(new PanelBuilder("panel_top_right2") {{
  651. childLayoutCenter();
  652. backgroundColor("#44f8");
  653. height("15%");
  654. width("100%");
  655. // add image
  656. image(new ImageBuilder() {{
  657. filename("Interface/face1.png");
  658. valignCenter();
  659. alignCenter();
  660. height("50%");
  661. width("30%");
  662. }});
  663. }});</code></pre>
  664. </div>
  665. </div>
  666. <div class="paragraph">
  667. <p>This image is scaled to use 50% of the height and 30% of the width of its container.</p>
  668. </div>
  669. </div>
  670. <div class="sect2">
  671. <h3 id="add-static-text"><a class="anchor" href="#add-static-text"></a>Add Static Text</h3>
  672. <div class="paragraph">
  673. <p>The game title is a typical example of static text. In the <code>start</code> screen <code>foreground</code> layer, add the following text element:</p>
  674. </div>
  675. <div class="listingblock">
  676. <div class="content">
  677. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">// panel added
  678. panel(new PanelBuilder("panel_top") {{
  679. childLayoutCenter();
  680. alignCenter();
  681. backgroundColor("#f008");
  682. height("25%");
  683. width("75%");
  684. text(new TextBuilder() {{
  685. text("My Cool Game");
  686. font("Interface/Fonts/Default.fnt");
  687. height("100%");
  688. width("100%");
  689. }});
  690. }});</code></pre>
  691. </div>
  692. </div>
  693. <div class="paragraph">
  694. <p>For longer pieces of static text, such as an introduction, you can use <code>wrap="true"</code>. Setting <code>wrap="true"</code> will only work when you set a width for the text element, so that Nifty knows when to wrap a line. Add the following text element to the <code>Start</code> screen <code>foreground</code> layer:</p>
  695. </div>
  696. <div class="listingblock">
  697. <div class="content">
  698. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">panel(new PanelBuilder("panel_mid") {{
  699. childLayoutCenter();
  700. alignCenter();
  701. backgroundColor("#0f08");
  702. height("50%");
  703. width("75%");
  704. // add text
  705. text(new TextBuilder() {{
  706. text("Here goes some text describing the game and the rules and stuff. "
  707. + "Incidentally, the text is quite long and needs to wrap at the end of lines.");
  708. font("Interface/Fonts/Default.fnt");
  709. wrap(true);
  710. height("100%");
  711. width("100%");
  712. }});
  713. }});</code></pre>
  714. </div>
  715. </div>
  716. <div class="paragraph">
  717. <p>The font used is jME3&#8217;s default font &#8220;Interface/Fonts/Default.fnt&#8221; which is included in the jMonkeyEngine.JAR. You can add your own fonts to your own <code>assets/Interface</code> directory. Set your font to the one you created during the start of the <a href="nifty_gui_xml_layout.html#implement-your-gui-layout#" class="page">Gui Implementation</a> phase of your game.</p>
  718. </div>
  719. </div>
  720. <div class="sect2">
  721. <h3 id="add-controls"><a class="anchor" href="#add-controls"></a>Add Controls</h3>
  722. <div class="paragraph">
  723. <p>Before you can use any control, you must load a Control Definition first. Thats why we add the following two lines <em>before</em> the screen definitions:</p>
  724. </div>
  725. <div class="listingblock">
  726. <div class="content">
  727. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">nifty.loadStyleFile("nifty-default-styles.xml");
  728. nifty.loadControlFile("nifty-default-controls.xml");</code></pre>
  729. </div>
  730. </div>
  731. <div class="sect3">
  732. <h4 id="label-control"><a class="anchor" href="#label-control"></a>Label Control</h4>
  733. <div class="paragraph">
  734. <p>Use label controls for text that you want to edit dynamically from Java. One example for this is the score display.
  735. In the <code>hud</code> screen&#8217;s <code>foreground</code> layer, add the following text element:</p>
  736. </div>
  737. <div class="listingblock">
  738. <div class="content">
  739. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">panel(new PanelBuilder("panel_top_right1") {{
  740. childLayoutCenter();
  741. backgroundColor("#00f8");
  742. height("15%");
  743. width("100%");
  744. control(new LabelBuilder(){{
  745. color("#000");
  746. text("123");
  747. width("100%");
  748. height("100%");
  749. }});
  750. }});</code></pre>
  751. </div>
  752. </div>
  753. <div class="paragraph">
  754. <p>Note that the width and height do not scale the bitmap font, but make indirectly certain it is centered. If you want a different size for the font, you need to provide an extra bitmap font (they come with fixes sizes and don&#8217;t scale well).</p>
  755. </div>
  756. </div>
  757. <div class="sect3">
  758. <h4 id="button-control"><a class="anchor" href="#button-control"></a>Button Control</h4>
  759. <div class="paragraph">
  760. <p>Our <abbr title="Graphical User Interface">GUI</abbr> plan asks for two buttons on the start screen. You add the Start and Quit buttons to the bottom panel of the <code>start</code> screen using the <code>&lt;control&gt;</code> element:</p>
  761. </div>
  762. <div class="listingblock">
  763. <div class="content">
  764. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">panel(new PanelBuilder("panel_bottom_left") {{
  765. childLayoutCenter();
  766. valignCenter();
  767. backgroundColor("#44f8");
  768. height("50%");
  769. width("50%");
  770. // add control
  771. control(new ButtonBuilder("StartButton", "Start") {{
  772. alignCenter();
  773. valignCenter();
  774. height("50%");
  775. width("50%");
  776. }});
  777. }});
  778. panel(new PanelBuilder("panel_bottom_right") {{
  779. childLayoutCenter();
  780. valignCenter();
  781. backgroundColor("#88f8");
  782. height("50%");
  783. width("50%");
  784. // add control
  785. control(new ButtonBuilder("QuitButton", "Quit") {{
  786. alignCenter();
  787. valignCenter();
  788. height("50%");
  789. width("50%");
  790. }});
  791. }});</code></pre>
  792. </div>
  793. </div>
  794. <div class="paragraph">
  795. <p>Note that these controls don&#8217;t do anything yet – we&#8217;ll get to that soon.</p>
  796. </div>
  797. </div>
  798. <div class="sect3">
  799. <h4 id="other-controls"><a class="anchor" href="#other-controls"></a>Other Controls</h4>
  800. <div class="paragraph">
  801. <p>Nifty additionally offers many customizable controls such as check boxes, text fields, menus, chats, tabs, …</p>
  802. </div>
  803. <div class="paragraph">
  804. <p>See also:</p>
  805. </div>
  806. <div class="ulist">
  807. <ul>
  808. <li>
  809. <p><a href="https://github.com/nifty-gui/nifty-gui/raw/1.4/nifty-core/manual/nifty-gui-the-manual-1.3.2.pdf">Nifty GUI - the Manual: Elements</a></p>
  810. </li>
  811. <li>
  812. <p><a href="https://github.com/nifty-gui/nifty-gui/wiki/Controls">Controls</a></p>
  813. </li>
  814. </ul>
  815. </div>
  816. </div>
  817. </div>
  818. </div>
  819. </div>
  820. <div class="sect1">
  821. <h2 id="intermediate-result"><a class="anchor" href="#intermediate-result"></a>Intermediate Result</h2>
  822. <div class="sectionbody">
  823. <div class="paragraph">
  824. <p>When you preview this code in the jMonkeyEngine SDK, our tutorial demo should looks as follows: A start screen with two buttons, and a game screen with a simple HUD frame and a blue cube (which stands for any jME3 game content).</p>
  825. </div>
  826. <div class="admonitionblock tip">
  827. <table>
  828. <tr>
  829. <td class="icon">
  830. <i class="fa icon-tip" title="Tip"></i>
  831. </td>
  832. <td class="content">
  833. Remove all lines that set background colors, you only needed them to see the arrangement.
  834. </td>
  835. </tr>
  836. </table>
  837. </div>
  838. <div class="imageblock text-center">
  839. <div class="content">
  840. <img src="../../_images/jme3/advanced/nifty-gui-simple-demo.png" alt="nifty-gui-simple-demo.png" width="" height="">
  841. </div>
  842. </div>
  843. <div class="paragraph">
  844. <p>Your <code>Screen.java</code> file should look like this:</p>
  845. </div>
  846. <div class="listingblock">
  847. <div class="content">
  848. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">package mygame;
  849. import com.jme3.app.Application;
  850. import com.jme3.app.SimpleApplication;
  851. import com.jme3.app.state.BaseAppState;
  852. import com.jme3.niftygui.NiftyJmeDisplay;
  853. import de.lessvoid.nifty.Nifty;
  854. import de.lessvoid.nifty.builder.ImageBuilder;
  855. import de.lessvoid.nifty.builder.LayerBuilder;
  856. import de.lessvoid.nifty.builder.PanelBuilder;
  857. import de.lessvoid.nifty.builder.ScreenBuilder;
  858. import de.lessvoid.nifty.builder.TextBuilder;
  859. import de.lessvoid.nifty.controls.button.builder.ButtonBuilder;
  860. import de.lessvoid.nifty.controls.label.builder.LabelBuilder;
  861. import de.lessvoid.nifty.screen.DefaultScreenController;
  862. public class Screen extends BaseAppState {
  863. @Override
  864. protected void initialize(Application app) {
  865. //It is technically safe to do all initialization and cleanup in the
  866. //onEnable()/onDisable() methods. Choosing to use initialize() and
  867. //cleanup() for this is a matter of performance specifics for the
  868. //implementor.
  869. //TODO: initialize your AppState, e.g. attach spatials to rootNode
  870. }
  871. @Override
  872. protected void cleanup(Application app) {
  873. //TODO: clean up what you initialized in the initialize method,
  874. //e.g. remove all spatials from rootNode
  875. }
  876. //onEnable()/onDisable() can be used for managing things that should
  877. //only exist while the state is enabled. Prime examples would be scene
  878. //graph attachment or input listener attachment.
  879. @Override
  880. protected void onEnable() {
  881. NiftyJmeDisplay niftyDisplay = NiftyJmeDisplay.newNiftyJmeDisplay(
  882. getApplication().getAssetManager(),
  883. getApplication().getInputManager(),
  884. getApplication().getAudioRenderer(),
  885. getApplication().getGuiViewPort());
  886. Nifty nifty = niftyDisplay.getNifty();
  887. getApplication().getGuiViewPort().addProcessor(niftyDisplay);
  888. ((SimpleApplication) getApplication()).getFlyByCamera().setDragToRotate(true);
  889. nifty.loadStyleFile("nifty-default-styles.xml");
  890. nifty.loadControlFile("nifty-default-controls.xml");
  891. nifty.addScreen("start", new ScreenBuilder("start") {{
  892. controller(new DefaultScreenController());
  893. // layer added
  894. layer(new LayerBuilder("background") {{
  895. childLayoutCenter();
  896. // backgroundColor("#000f");
  897. // add image
  898. image(new ImageBuilder() {{
  899. filename("Interface/start-background.png");
  900. }});
  901. }});
  902. layer(new LayerBuilder("foreground") {{
  903. childLayoutVertical();
  904. // backgroundColor("#0000");
  905. // panel added
  906. panel(new PanelBuilder("panel_top") {{
  907. childLayoutCenter();
  908. alignCenter();
  909. // backgroundColor("#f008");
  910. height("25%");
  911. width("75%");
  912. text(new TextBuilder() {{
  913. text("My Cool Game");
  914. font("Interface/Fonts/Arial.fnt");
  915. height("100%");
  916. width("100%");
  917. }});
  918. }});
  919. panel(new PanelBuilder("panel_mid") {{
  920. childLayoutCenter();
  921. alignCenter();
  922. // backgroundColor("#0f08");
  923. height("50%");
  924. width("75%");
  925. // add text
  926. text(new TextBuilder() {{
  927. text("Here goes some text describing the game and the rules and stuff. "
  928. + "Incidentally, the text is quite long and needs to wrap at the end of lines. ");
  929. font("Interface/Fonts/Arial.fnt");
  930. wrap(true);
  931. height("100%");
  932. width("100%");
  933. }});
  934. }});
  935. panel(new PanelBuilder("panel_bottom") {{
  936. childLayoutHorizontal();
  937. alignCenter();
  938. // backgroundColor("#00f8");
  939. height("25%");
  940. width("75%");
  941. panel(new PanelBuilder("panel_bottom_left") {{
  942. childLayoutCenter();
  943. valignCenter();
  944. // backgroundColor("#44f8");
  945. height("50%");
  946. width("50%");
  947. // add control
  948. control(new ButtonBuilder("StartButton", "Start") {{
  949. alignCenter();
  950. valignCenter();
  951. height("50%");
  952. width("50%");
  953. }});
  954. }});
  955. panel(new PanelBuilder("panel_bottom_right") {{
  956. childLayoutCenter();
  957. valignCenter();
  958. // backgroundColor("#88f8");
  959. height("50%");
  960. width("50%");
  961. // add control
  962. control(new ButtonBuilder("QuitButton", "Quit") {{
  963. alignCenter();
  964. valignCenter();
  965. height("50%");
  966. width("50%");
  967. }});
  968. }});
  969. }}); // panel added
  970. }});
  971. // layer added
  972. }}.build(nifty));
  973. nifty.addScreen("hud", new ScreenBuilder("hud") {{
  974. controller(new DefaultScreenController());
  975. layer(new LayerBuilder("background") {{
  976. childLayoutCenter();
  977. // backgroundColor("#000f");
  978. // add image
  979. image(new ImageBuilder() {{
  980. filename("Interface/hud-frame.png");
  981. }});
  982. }});
  983. layer(new LayerBuilder("foreground") {{
  984. childLayoutHorizontal();
  985. // backgroundColor("#0000");
  986. // panel added
  987. panel(new PanelBuilder("panel_left") {{
  988. childLayoutVertical();
  989. // backgroundColor("#0f08");
  990. height("100%");
  991. width("80%");
  992. // &lt;!-- spacer --&gt;
  993. }});
  994. panel(new PanelBuilder("panel_right") {{
  995. childLayoutVertical();
  996. // backgroundColor("#00f8");
  997. height("100%");
  998. width("20%");
  999. panel(new PanelBuilder("panel_top_right1") {{
  1000. childLayoutCenter();
  1001. // backgroundColor("#00f8");
  1002. height("15%");
  1003. width("100%");
  1004. control(new LabelBuilder(){{
  1005. color("#000");
  1006. text("123");
  1007. width("100%");
  1008. height("100%");
  1009. }});
  1010. }});
  1011. panel(new PanelBuilder("panel_top_right2") {{
  1012. childLayoutCenter();
  1013. // backgroundColor("#44f8");
  1014. height("15%");
  1015. width("100%");
  1016. // add image
  1017. image(new ImageBuilder() {{
  1018. filename("Interface/face1.png");
  1019. valignCenter();
  1020. alignCenter();
  1021. height("50%");
  1022. width("30%");
  1023. }});
  1024. }});
  1025. panel(new PanelBuilder("panel_bot_right") {{
  1026. childLayoutCenter();
  1027. valignCenter();
  1028. // backgroundColor("#88f8");
  1029. height("70%");
  1030. width("100%");
  1031. }});
  1032. }}); // panel added
  1033. }});
  1034. }}.build(nifty));
  1035. nifty.gotoScreen("hud"); // start the screen
  1036. }
  1037. @Override
  1038. protected void onDisable() {
  1039. //Called when the state was previously enabled but is now disabled
  1040. //either because setEnabled(false) was called or the state is being
  1041. //cleaned up.
  1042. }
  1043. @Override
  1044. public void update(float tpf) {
  1045. //TODO: implement behavior during runtime
  1046. }
  1047. }</code></pre>
  1048. </div>
  1049. </div>
  1050. </div>
  1051. </div>
  1052. <div class="sect1">
  1053. <h2 id="nifty-java-settings"><a class="anchor" href="#nifty-java-settings"></a>Nifty Java Settings</h2>
  1054. <div class="sectionbody">
  1055. <div class="paragraph">
  1056. <p>Before initializing the nifty screens, you set up properties and register media.</p>
  1057. </div>
  1058. <table class="tableblock frame-all grid-all stretch">
  1059. <colgroup>
  1060. <col style="width: 50%;">
  1061. <col style="width: 50%;">
  1062. </colgroup>
  1063. <thead>
  1064. <tr>
  1065. <th class="tableblock halign-left valign-top">Nifty Method</th>
  1066. <th class="tableblock halign-left valign-top">Description</th>
  1067. </tr>
  1068. </thead>
  1069. <tbody>
  1070. <tr>
  1071. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1072. <p>registerSound("mysound", "Interface/abc.wav");</p>
  1073. </div></div></td>
  1074. <td class="tableblock halign-left valign-top"><div class="content"></div></td>
  1075. </tr>
  1076. <tr>
  1077. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1078. <p>registerMusic("mymusic", "Interface/xyz.ogg");</p>
  1079. </div></div></td>
  1080. <td class="tableblock halign-left valign-top"><div class="content"></div></td>
  1081. </tr>
  1082. <tr>
  1083. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1084. <p>registerMouseCursor("mypointer", "Interface/abc.png", 5, 4);</p>
  1085. </div></div></td>
  1086. <td class="tableblock halign-left valign-top"><div class="content"></div></td>
  1087. </tr>
  1088. <tr>
  1089. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1090. <p>registerEffect(?);</p>
  1091. </div></div></td>
  1092. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1093. <p>?</p>
  1094. </div></div></td>
  1095. </tr>
  1096. <tr>
  1097. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1098. <p>setDebugOptionPanelColors(true);</p>
  1099. </div></div></td>
  1100. <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
  1101. <p>Highlight all panels, makes it easier to arrange them.</p>
  1102. </div></div></td>
  1103. </tr>
  1104. </tbody>
  1105. </table>
  1106. <div class="paragraph">
  1107. <p>Example:</p>
  1108. </div>
  1109. <div class="listingblock">
  1110. <div class="content">
  1111. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">nifty.registerMouseCursor("hand", "Interface/mouse-cursor-hand.png", 5, 4);</code></pre>
  1112. </div>
  1113. </div>
  1114. </div>
  1115. </div>
  1116. <div class="sect1">
  1117. <h2 id="next-steps"><a class="anchor" href="#next-steps"></a>Next Steps</h2>
  1118. <div class="sectionbody">
  1119. <div class="paragraph">
  1120. <p>Integrate the <abbr title="Graphical User Interface">GUI</abbr> into the game. Typically, you will overlay the <abbr title="Graphical User Interface">GUI</abbr>.</p>
  1121. </div>
  1122. <div class="ulist">
  1123. <ul>
  1124. <li>
  1125. <p><a href="nifty_gui_overlay.html" class="page">Nifty GUI Overlay</a> (recommended)</p>
  1126. </li>
  1127. <li>
  1128. <p><a href="nifty_gui_projection.html" class="page">Nifty GUI Projection</a> (optional)</p>
  1129. </li>
  1130. </ul>
  1131. </div>
  1132. </div>
  1133. </div>
  1134. </article>
  1135. <aside class="toc sidebar" data-title="Contents" data-levels="2">
  1136. <div class="toc-menu"></div>
  1137. </aside>
  1138. </div>
  1139. </main>
  1140. </div>
  1141. <footer class="footer">
  1142. <p>Copyright 2020 jMonkeyEngine Wiki Contributors. Licensed BSD-3.</p>
  1143. </footer>
  1144. <script src="../../../_/js/vendor/docsearch.min.js"></script>
  1145. <!-- fetched from https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js -->
  1146. <script>
  1147. var search = docsearch({
  1148. apiKey: 'a736b6d93de805e26ec2f49b55013fbd',
  1149. indexName: 'jmonkeyengine',
  1150. inputSelector: '#search-input',
  1151. autocompleteOptions: { hint: false, keyboardShortcuts: ['s'] },
  1152. algoliaOptions: { hitsPerPage: 10 }
  1153. }).autocomplete
  1154. search.on('autocomplete:closed', function () { search.autocomplete.setVal() })
  1155. function focusSearchInput () { document.querySelector('#search-input').focus() }
  1156. if (document.querySelector('.home-link.is-current')) window.addEventListener('load', focusSearchInput)
  1157. </script>
  1158. <script src="../../../_/js/site.js"></script>
  1159. <script async src="../../../_/js/vendor/highlight.js"></script>
  1160. </body>
  1161. </html>