[SOLVED] NiftyGui onclick does not works

I have jme2 application and want to use niftygui 1.3 for ui part. I created my XML ui file and controller which starts succesfully but when I click to button nothing happens.

XML

[xml]<?xml version="1.0" encoding="UTF-8"?>

<nifty>

<useStyles filename="nifty-default-styles.xml" />

<useControls filename="nifty-default-controls.xml" />



<screen id="start" controller="lamao.soh.ui.controllers.TestNiftyScreenController">



<layer id="mainLayer" childLayout="vertical" align="center">



<panel id="SPACER" height="25%" width="100%" align="center" backgroundColor="#0000" childLayout="center" visibleToMouse="false"/>



<panel id="menuPanel" style="nifty-panel" childLayout="vertical" align="center" valign="center" width="50%" height="50%">

<effect>

<onStartScreen name="move" mode="in" direction="top" length="300" startDelay="0" inherit="true"/>

<onEndScreen name="move" mode="out" direction="bottom" length="300" startDelay="0" inherit="true"/>

<onHover name="pulsate" scaleFactor="0.008" startColor="#EE7F" endColor="#EE7F" post="true"/>

</effect>



<panel id="SPACER1" height="5%" width="100%" align="center" backgroundColor="#0000" childLayout="center" visibleToMouse="false"/>



<panel id="gameStart" height="44%" width="90%" align="center" backgroundColor="#BBBF" childLayout="center" visibleToMouse="true">

<control id="btnStart" name="button" label="Start Game" align="center" valign="center" width="100%" height="100%">

<interact onClick="quit()"/>

</control>

</panel>



<panel id="SPACER2" height="2%" width="100%" align="center" backgroundColor="#0000" childLayout="center" visibleToMouse="false"/>



<panel id="gameExit" height="44%" width="90%" align="center" backgroundColor="#BBBF" childLayout="center" visibleToMouse="true">

<control id="btnExit" name="button" label="Exit" align="center" valign="center" width="100%" height="100%"

visibleToMouse="true">

<interact onClick="quit"/>

</control>

</panel>



<panel id="SPACER2" height="5%" width="100%" align="center" backgroundColor="#0000" childLayout="center" visibleToMouse="false"/>



</panel>



<panel id="SPACER" height="25%" width="100%" align="center" backgroundColor="#0000" childLayout="center" visibleToMouse="false"/>

</layer>



</screen>

</nifty>[/xml]



controller

[java]/**

  • TestNiftyScreenController.java 15.11.2012

    *
  • Copyright 2012 Stones of History
  • All rights reserved.

    */

    package lamao.soh.ui.controllers;



    import java.util.logging.Logger;



    import sun.util.logging.resources.logging;



    import de.lessvoid.nifty.Nifty;

    import de.lessvoid.nifty.screen.DefaultScreenController;

    import de.lessvoid.nifty.screen.Screen;

    import de.lessvoid.nifty.screen.ScreenController;



    /**
  • @author lamao

    *

    */

    public class TestNiftyScreenController extends DefaultScreenController

    {

    private static final Logger LOGGER = Logger.getLogger(TestNiftyScreenController.class.getCanonicalName());





    private Nifty nifty;



    private Screen screen;



    /**
  • {@inheritDoc}

    */

    @Override

    public void bind(Nifty nifty, Screen screen)

    {

    this.nifty = nifty;

    this.screen = screen;

    }



    /**
  • {@inheritDoc}

    */

    @Override

    public void onEndScreen()

    {

    LOGGER.warning("onEndScreen is called");

    }



    /**
  • {@inheritDoc}

    */

    @Override

    public void onStartScreen()

    {

    LOGGER.info("onStartScreen is called");

    }



    public void quit()

    {

    LOGGER.info("QUIT is called");

    }



    }

    [/java]



    main class

    [java]/**
  • SHMain.java 25.03.2010

    *
  • Copyright 2010 Stones of History
  • All rights reserved.

    */

    package lamao.soh;



    import java.io.File;



    import lamao.soh.core.SHGamePack;

    import lamao.soh.core.SHScene;

    import lamao.soh.core.SHScripts;

    import lamao.soh.states.SHLevelState;

    import lamao.soh.ui.controllers.TestNiftyScreenController;

    import lamao.soh.utils.deled.SHSceneLoader;

    import lamao.soh.utils.events.SHEventDispatcher;



    import com.jmex.game.StandardGame;

    import com.jmex.game.state.BasicGameState;

    import com.jmex.game.state.GameStateManager;



    import de.lessvoid.nifty.Nifty;

    import de.lessvoid.nifty.jme.input.JmeInputSystem;

    import de.lessvoid.nifty.jme.render.JmeRenderDevice;

    import de.lessvoid.nifty.jme.sound.JmeSoundDevice;

    import de.lessvoid.nifty.tools.TimeProvider;



    /**
  • Enter point into the program.
  • @author lamao

    *

    */

    public class SHMain

    {

    private static StandardGame GAME = null;





    public static void main(String args[])

    {

    GAME = new StandardGame("Stones of History");

    GAME.start();



    NiftyState niftyState = new NiftyState("menu");

    GameStateManager.getInstance().attachChild(niftyState);

    niftyState.setActive(true);

    }



    static class NiftyState extends BasicGameState {



    Nifty nifty;

    /**
  • @param name

    /

    public NiftyState(String name)

    {

    super(name);



    nifty = new Nifty(new JmeRenderDevice(), new JmeSoundDevice(),

    new JmeInputSystem(), new TimeProvider());

    nifty.fromXml("data/nifty/main.xml", "start", new TestNiftyScreenController());

    nifty.registerMouseCursor("default", "data/cursors/cursor-default.png", 15, 15);

    nifty.getNiftyMouse().enableMouseCursor("default");

    }



    /
    (non-Javadoc)
  • @see com.jmex.game.state.BasicGameState#render(float)

    */

    @Override

    public void render(float tpf)

    {

    super.render(tpf);

    nifty.render(false);

    }



    }



    }

    [/java]

Found an issue reason. As mentioned here http://hub.jmonkeyengine.org/groups/gui/forum/topic/cant-interact-with-gui/ I don’t call update method for nifty. Here what I missed in NIftyState:

[java]

@Override

public void update(float tpf)

{

super.update(tpf);

nifty.update();

}

[/java]



Now all events work fine.