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:
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 )
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
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
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.