nifty_gui_java_layout.html 44 KB

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