nifty_gui_java_layout.html 44 KB

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