JMonkeyEngine3——NiftyGui CheckBox
CheckBox

CheckBox 控件显示一个简单的复选框,用户可以选中或取消选中。可以使用 CheckBoxBuilder 类从 Java 动态创建复选框,也可以使用<control name="checkbox"></control> 标签从 XML 创建复选框。
常用属性
| Name | Datatype | Default | Description |
| checked | boolean | false | CheckBox 的初始状态。“true”表示 CheckBox 默认选中,“false”表示 CheckBox 默认未选中。 |
EventBus Notification
CheckBox 支持 EventBus 通知任何改变 CheckBox 状态的操作。在这种情况下,将使用 CheckBox 的 ID 作为事件的主题来发布 CheckBoxStateChangedEvent。
Java Builder 示例
1 // Using the builder pattern 2 control(new CheckboxBuilder("multiSelectionCheckBox") {{ 3 checked(false); // start with uncheck 4 }});
XML 示例
1 <!-- simple default checkbox. please note: event notification requires an id --> 2 <control id="simpleCheckBox" name="checkbox" />
参考
https://github.com/nifty-gui/nifty-gui/wiki/CheckBox
案例
xml布局文件如下:
1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 2 <nifty xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://nifty-gui.lessvoid.com/nifty-gui" xsi:schemaLocation="https://raw.githubusercontent.com/void256/nifty-gui/1.4/nifty-core/src/main/resources/nifty.xsd https://raw.githubusercontent.com/void256/nifty-gui/1.4/nifty-core/src/main/resources/nifty.xsd"> 3 <useControls filename="nifty-default-controls.xml"/> 4 <useStyles filename="nifty-default-styles.xml"/> 5 <screen id="screen0" controller="mygame.NiftyGuiTextField" > 6 <layer id="layer0" childLayout="center"> 7 <panel id="panel0" height="57px" style="nifty-panel-simple" width="401px" align="center" childLayout="vertical" valign="center" y="-1px" x="-1px"> 8 <control name="textfield" id="textField0" text="user name" width="50%" align="center" valign="center" y="109" x="21"/> 9 <control name="textfield" id="textField1" text="12355" width="50%" align="center" passwordChar="*" valign="center"/> 10 </panel> 11 </layer> 12 </screen> 13 </nifty>
Java代码如下:
1 import com.jme3.app.SimpleApplication; 2 import com.jme3.math.ColorRGBA; 3 import com.jme3.niftygui.NiftyJmeDisplay; 4 import de.lessvoid.nifty.Nifty; 5 import de.lessvoid.nifty.NiftyEventSubscriber; 6 import de.lessvoid.nifty.controls.CheckBoxStateChangedEvent; 7 import de.lessvoid.nifty.controls.TextField; 8 import de.lessvoid.nifty.controls.TextFieldChangedEvent; 9 import de.lessvoid.nifty.screen.Screen; 10 import de.lessvoid.nifty.screen.ScreenController; 11 12 /** 13 * @date 2024年7月12日16点25分 14 * @author JohnKkk 15 */ 16 public class NiftyGuiCheckBox extends SimpleApplication implements ScreenController{ 17 18 private Nifty m_Nifty; 19 20 public static void main(String[] args) { 21 NiftyGuiCheckBox niftyGuiLabel = new NiftyGuiCheckBox(); 22 niftyGuiLabel.start(); 23 } 24 25 @NiftyEventSubscriber(id="checkbox0") 26 public final void onCheckBox0StateChangedEvent(final String id, final CheckBoxStateChangedEvent event){ 27 System.out.println("CheckBox:" + id + ",选中状态:" + event.getCheckBox().isChecked()); 28 } 29 30 @NiftyEventSubscriber(id="checkbox1") 31 public final void onCheckBox1StateChangedEvent(final String id, final CheckBoxStateChangedEvent event){ 32 System.out.println("CheckBox:" + id + ",选中状态:" + event.getCheckBox().isChecked()); 33 } 34 35 @NiftyEventSubscriber(id="checkbox2") 36 public final void onCheckBox2StateChangedEvent(final String id, final CheckBoxStateChangedEvent event){ 37 System.out.println("CheckBox:" + id + ",选中状态:" + event.getCheckBox().isChecked()); 38 } 39 40 @Override 41 public void simpleInitApp() { 42 // 设置默认背景色 43 getViewPort().setBackgroundColor(ColorRGBA.DarkGray); 44 45 // 初始化Nifty 46 NiftyJmeDisplay niftyDisplay = NiftyJmeDisplay.newNiftyJmeDisplay( 47 assetManager, 48 inputManager, 49 audioRenderer, 50 guiViewPort); 51 m_Nifty = niftyDisplay.getNifty(); 52 // 将NiftyGUI显示对象添加到JME3中 53 guiViewPort.addProcessor(niftyDisplay); 54 55 m_Nifty.fromXml("Interface/NiftyGuiCheckBox.xml", "screen0"); 56 57 // 禁用flyCam并显示鼠标 58 flyCam.setEnabled(false); 59 inputManager.setCursorVisible(true); 60 } 61 62 @Override 63 public void bind(Nifty arg0, Screen arg1) { 64 } 65 66 @Override 67 public void onStartScreen() { 68 } 69 70 @Override 71 public void onEndScreen() { 72 } 73 74 }
注意到第25~38行,我们为三个CheckBox都订阅了EventBus事件执行函数。
启动JME3程序,执行结果如下:

我们还可以通过<interact>标签(基本事件参考)来与Java代码交互。

浙公网安备 33010602011771号