Dear JGO,
I’m currently writing a game with Slick2D and NiftyGUI (v. 1.3.2). As always I’ve created a simple XML file with a center aligned panel. The panel contains two labels (horizontal oriented):
?xml version="1.0" encoding="UTF-8"?>
<nifty xmlns="http://nifty-gui.sourceforge.net/nifty-1.3.xsd" xmlns:xsi="http://
www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://nifty-
gui.sourceforge.net/nifty-1.3.xsd http://nifty-gui.sourceforge.net/nifty-1.3.xsd">
<useStyles filename="nifty-default-styles.xml" />
<useControls filename="nifty-default-controls.xml" />
<screen id="start">
<layer>
<!-- Caption -->
<panel childLayout="horizontal" align="center">
<control
id="lblCaption"
name="label"
color="#bccf39"
text="caption"
/>
<control
id="lblVersion"
name="label"
text="version"
marginLeft="10px"
color="#ff6000"
/>
</panel>
</label>
</screen>
I can change the text content of those controls in Java:
// Inside a screen controller...
Label lblVersion = screen.findNiftyControl("lblVersion", Label.class);
Label lblCaption = screen.findNiftyControl("lblCaption", Label.class);
lblCaption.setText("A very long long long long long text!");
The text will be changed - but not the width of the label! The result: the text is cropped. That’s very annoying. I’ve tried the following solution to solve the problem:
TextRenderer renderer = lblCaption.getElement().getRenderer(TextRenderer.class);
lblCaption.setWidth(new SizeValue(renderer.getTextWidth() + "px"));
// Update the panel and all children
lblCaption.getElement().getParent().getParent().layoutElements();
This works for me but it’s not a very elegant way. Has anyone experience with this problem? ???