Basic Gui->java connection – please help

hi guys,



i try to trigger a simple action with a click. i dont understand, why my it is not working. i did several tutorials and as far as i see, everything should work, but it doesnt. it would be kind, if someone could check my code:



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="mygame.Screen1">

<layer id="layer1" backgroundColor="#003f" childLayout="center">

<panel height="25%" width="35%" align="center" valign="center" backgroundColor="#f60f" childLayout="vertical">



<panel id="firstPanel1" width="100%" height="40%" childLayout="center">

<control id="username" type="textfield" visibleToMouse="true" align="center" valign="center"/>

</panel>

<panel id="firstPanel2" width="100%" height="40%" childLayout="center">

<control id="password" type="textfield" visibleToMouse="true" align="center" valign="center" passwordChar="*"/>

</panel>

<panel id="firstPanel3" width="100%" height="20%" childLayout="center">

<control id="button1" type="button" align="center" valign="center" label="login" onClick="submit1()" visibleToMouse="true"/>



</panel>



</panel>

</layer>

</screen>

</nifty>

[/xml]



java:

[java]

package mygame;



import de.lessvoid.nifty.Nifty;

import de.lessvoid.nifty.screen.Screen;

import de.lessvoid.nifty.screen.ScreenController;









public class Screen1 implements ScreenController {



@Override

public void bind(Nifty nifty, Screen screen) {

}



@Override

public void onStartScreen() {

}



@Override

public void onEndScreen() {

}



public void submit1() {

System.out.println("KLICK");

}

}

[/java]



if i see it correct in the debugging output, the Screen1-class is loaded, but, when i click on the button, nothing happens.



please help me

thank you



skee

You have to add the onClick-attribute to an interact-element as described here: :wink:

https://wiki.jmonkeyengine.org/legacy/doku.php/jme3:advanced:nifty_gui_java_interaction



[xml]<panel id="firstPanel3" width="100%" height="20%" childLayout="center">

<control id="button1" type="button" align="center" valign="center" label="login" visibleToMouse="true"/>

<interact onClick="submit1()"/>

</panel>[/xml]



(Untested, but it should work :stuck_out_tongue:)

Close but not quite right. The element needs to be inside the button. Else the will work on the . Unless off course this is what you want.

[xml]

<panel id="firstPanel3" width="100%" height="20%" childLayout="center">

<control id="button1" type="button" align="center" valign="center" label="login" visibleToMouse="true">

<interact onClick="submit1()"/>

</control>

</panel>

[/xml]

Is the correct version if you want to submit1() method to be called on the press of a button.

Thx for the quick replay. looks like i am a bit supid :smiley:



I changed it, like you said:

[xml]<panel id="firstPanel3" width="100%" height="20%" childLayout="center">

<control id="button1" type="button" align="center" valign="center" label="login" visibleToMouse="true">

<interact onClick="submit1()"/>

</control>

</panel>[/xml]



But, now i get an error, when i try to start the game:

[java]

org.xmlpull.v1.XmlPullParserException: end tag name </control> must match start tag name <panel> from line 17 (position: TEXT seen …<interact onClick="submit1()"/>n tttt</control>… @20:19)

at org.xmlpull.mxp1.MXParser.parseEndTag(MXParser.java:1689)

at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1131)

at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)

at de.lessvoid.xml.xpp3.XmlParser.nextTag(XmlParser.java:188)

at de.lessvoid.xml.xpp3.XmlParser.zeroOrMore(XmlParser.java:119)

at de.lessvoid.xml.xpp3.XmlParser.zeroOrMore(XmlParser.java:120)

at de.lessvoid.xml.lwxs.elements.XmlProcessorType.process(XmlProcessorType.java:49)

at de.lessvoid.xml.lwxs.elements.XmlProcessorElement.processSubstGroup(XmlProcessorElement.java:64)

at de.lessvoid.xml.lwxs.elements.Element$Helper.process(Element.java:80)

at de.lessvoid.xml.xpp3.XmlParser.processElement(XmlParser.java:150)

at de.lessvoid.xml.xpp3.XmlParser.zeroOrMore(XmlParser.java:117)

at de.lessvoid.xml.xpp3.XmlParser.zeroOrMore(XmlParser.java:120)

at de.lessvoid.xml.xpp3.XmlParser.zeroOrMore(XmlParser.java:120)

at de.lessvoid.xml.lwxs.elements.XmlProcessorType.process(XmlProcessorType.java:49)

at de.lessvoid.xml.lwxs.elements.XmlProcessorElement.processSubstGroup(XmlProcessorElement.java:64)

at de.lessvoid.xml.lwxs.elements.Element$Helper.process(Element.java:80)

at de.lessvoid.xml.xpp3.XmlParser.processElement(XmlParser.java:150)

at de.lessvoid.xml.xpp3.XmlParser.zeroOrMore(XmlParser.java:117)

at de.lessvoid.xml.lwxs.elements.XmlProcessorType.process(XmlProcessorType.java:49)

at de.lessvoid.xml.xpp3.XmlParser.processElement(XmlParser.java:150)

at de.lessvoid.xml.xpp3.XmlParser.zeroOrMore(XmlParser.java:89)

at de.lessvoid.xml.lwxs.elements.XmlProcessorElement.process(XmlProcessorElement.java:45)

at de.lessvoid.xml.lwxs.elements.XmlProcessorType.process(XmlProcessorType.java:46)

at de.lessvoid.xml.lwxs.elements.XmlProcessorElement.processSubstGroup(XmlProcessorElement.java:58)

at de.lessvoid.xml.lwxs.elements.Element$Helper.process(Element.java:80)

at de.lessvoid.xml.xpp3.XmlParser.processElement(XmlParser.java:150)

at de.lessvoid.xml.xpp3.XmlParser.zeroOrMore(XmlParser.java:117)

at de.lessvoid.xml.xpp3.XmlParser.zeroOrMore(XmlParser.java:120)

at de.lessvoid.xml.xpp3.XmlParser.zeroOrMore(XmlParser.java:120)

at de.lessvoid.xml.lwxs.elements.XmlProcessorType.process(XmlProcessorType.java:49)

at de.lessvoid.xml.xpp3.XmlParser.processElement(XmlParser.java:150)

at de.lessvoid.xml.xpp3.XmlParser.required(XmlParser.java:55)

at de.lessvoid.xml.lwxs.Schema.loadXml(Schema.java:67)

at de.lessvoid.nifty.loaderv2.NiftyLoader.loadNiftyXml(NiftyLoader.java:48)

at de.lessvoid.nifty.Nifty.loadFromFile(Nifty.java:467)

at de.lessvoid.nifty.Nifty.fromXml(Nifty.java:369)

at mygame.Main.simpleInitApp(Main.java:172)

at com.jme3.app.SimpleApplication.initialize(SimpleApplication.java:218)

at com.jme3.system.lwjgl.LwjglAbstractDisplay.initInThread(LwjglAbstractDisplay.java:138)

at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:206)

at java.lang.Thread.run(Thread.java:636)

[/java]



i dont understand the error. any hints?



thanks

skee

Are you sure you changed

[xml]

<control id="button1" type="button" align="center" valign="center" label="login" visibleToMouse="true"/>

[/xml]

into

[xml]

<control id="button1" type="button" align="center" valign="center" label="login" visibleToMouse="true">

[/xml]

?



Note te removing of the / at the end there.

damn, that was it.



thx a lot, you saved my day :wink:

And just so you know, the type=“whatever” keyword should have been deprecated, avoid grief in the future by using the right keyword right now. It’s name=“controlName”.

Ah yes, missed that one.