Hi,
First so glad we moved to 1.3
I am Having issue with TextFieldBuilder. It semply not showing anything no matter I put in width
the only thing I see is the cursor
The only way see something is to add a default value. and in that case only the default value shows, ie
textfield width is the width of the default string I put
Sample code to reproduce in JME is
[java]Screen screen = new ScreenBuilder("start") {{
layer(new LayerBuilder("dialogLayer") {{
childLayoutCenter();
panel(new PanelBuilder("dialog-parent"){{
height("200px");
width("200px");
align(Align.Center);
valign(VAlign.Center);
childLayoutCenter();
backgroundColor(Color.WHITE);
control(new TextFieldBuilder("chatInput"){{
childLayoutHorizontal();
width("100px");
}});
}});
}});
}}.build(nifty);
nifty.addScreen("start", screen);
nifty.gotoScreen("start");[/java]
that will show only a white panel with a cursor inside no text field
anybody had/is having same issue?
in advance thx
Pit
Well, the drawback of given you early access to Nifty 1.3 is that you’ll find out about some things the hard way and not while reading a well written documentation in the wiki
You’ll need to load the styles and the controls before you create the screen. You’ll need to do something like:
[xml]nifty.loadStyleFile(“nifty-default-styles.xml”);
nifty.loadControlFile(“nifty-default-controls.xml”);[/xml]
I did that
here is the code just before
[java]inputManager.clearMappings();
NiftyJmeDisplay niftyDisplay = new NiftyJmeDisplay(assetManager,
inputManager,
audioRenderer,
guiViewPort);
nifty = niftyDisplay.getNifty();
nifty.loadStyleFile("nifty-default-styles.xml");
nifty.loadControlFile("nifty-default-controls.xml");
// attach the nifty display to the gui view port as a processor
guiViewPort.addProcessor(niftyDisplay);[/java]
so here is the complete code
[java]public class TestTextField extends SimpleApplication implements AnalogListener,ActionListener{
public static MessageHandler messageHandler = new MessageHandler(false);
private Nifty nifty;
public static TestTextField app;
public static void main(String[] args) {
app = new TestTextField();
app.setShowSettings(false);
AppSettings settings = new AppSettings(true);
settings.put("Width", 1280);
settings.put("Height", 720);
settings.put("Title", "SpaceLife");
settings.put("BitsPerPixel", 24);
settings.put("Frequency", 60);
settings.put("DepthBits", 24);
app.setSettings(settings);
app.start();
}
@Override
public void simpleInitApp() {
inputManager.clearMappings();
NiftyJmeDisplay niftyDisplay = new NiftyJmeDisplay(assetManager,
inputManager,
audioRenderer,
guiViewPort);
nifty = niftyDisplay.getNifty();
nifty.loadStyleFile("nifty-default-styles.xml");
nifty.loadControlFile("nifty-default-controls.xml");
// attach the nifty display to the gui view port as a processor
guiViewPort.addProcessor(niftyDisplay);
Screen screen = new ScreenBuilder("start") {{
layer(new LayerBuilder("dialogLayer") {{
childLayoutCenter();
panel(new PanelBuilder("dialog-parent"){{
height("200px");
width("200px");
align(Align.Center);
valign(VAlign.Center);
childLayoutCenter();
backgroundColor(Color.WHITE);
control(new TextFieldBuilder("chatInput"){{
childLayoutHorizontal();
width("100px");
}});
}});
}});
}}.build(nifty);
nifty.addScreen("start", screen);
nifty.gotoScreen("start");
flyCam.setDragToRotate(true);
}[/java]
remove the “childLayoutHorizontal();” call within the “new TextFieldBuilder(“chatInput”){{” and it will work.
This specific “problem” is a drawback of the way that builder mechanism works. You can see the blog post here for details http://nifty-gui.lessvoid.com/archives/179
Especially see this note in the blog post:
—
Please Note:
As we’re creating annonymous inner classes each time we add a new xxxBuilder() {{ }} method and we’re nesting them it’s possible to access methods from the previous annonymous class and that could be confusing because we could misconfigure the parent element. So it’s probably best to only use methods from the current Builder class.
—
It’s odd. I know and I don’t like this because it’s not obvious that you’re changing the PanelBuilder and not the TextFieldBuilder in your case (it’s not necessary to set childLayoutHorizontal() for the TextFIeldBuilder btw) but we’ve not yet found a nice solution for this yet So for the moment you just need to be careful.
Wonderfull!!! works like a charm
thx a lot.